Javascript和onbeforeunload?

Javascript和onbeforeunload?,javascript,alert,onbeforeunload,Javascript,Alert,Onbeforeunload,我有 我想这样做,如果你按下这个按钮,它也会设置一个变量,这样如果你试图离开这个页面,它会弹出一个“你确定你想离开这个页面”的警报,防止人们在上传过程中意外离开 不必担心上传完成后会取消变量设置,我会补充一点,我只需要你们中的一个聪明的程序员来为我创建一个框架 谢谢 依赖onbeforeunload充其量是粗略的。因为垃圾邮件发送者滥用行为的方式与你所说的人们滥用行为的方式基本相同 如果关闭事件是通过激活按钮等触发的,则现在只能响应onbeforeunload function warnUse

我有

我想这样做,如果你按下这个按钮,它也会设置一个变量,这样如果你试图离开这个页面,它会弹出一个“你确定你想离开这个页面”的警报,防止人们在上传过程中意外离开

不必担心上传完成后会取消变量设置,我会补充一点,我只需要你们中的一个聪明的程序员来为我创建一个框架


谢谢

依赖onbeforeunload充其量是粗略的。因为垃圾邮件发送者滥用行为的方式与你所说的人们滥用行为的方式基本相同

如果关闭事件是通过激活按钮等触发的,则现在只能响应onbeforeunload

function warnUser()
{
   if(dataIsDirty)
   {
      return "You have made changes. They will be lost if you continue.";
   }
   else
   {
      // Reset the flag to its default value.
      dataIsDirty = false;
   }
}

function isDirty()
{
   dataIsDirty = true;
}

function isClean()
{
    dataIsDirty = false;
}
然后就像在
onbeforeuload
事件中一样使用它

window.onbeforeunload = warnUser;
dataIsDirty = false; //Or true, depending on if you want it to show up even if they dont' make changes)

然后,要使用它,只需将“isClean”函数用于您不想触发它的任何事件(例如保存),或者您可以将“isDirty”附加到您想在它们离开之前触发它的任何事件(例如,编辑表单字段)。

将此声明添加到页面:

var upcount = 0;
将onclick更改为:

onclick="++upcount; swfu.startUpload();"
如果
swfu
在完成上传时给您带来某种事件,请在其上添加以下内容:

--upcount;
并添加此处理程序:

window.onbeforeunload = function() {
    if (upcount > 0) {
        return "The upload is still in progress, leaving the page will cancel it.";
    }
}
如果浏览器尊重onbeforeunload,那就行了。他们中的大多数人大多数时候都是这样。在他们没有的地方,你试过了。请注意,通过使用计数器,您允许多次上载


您可以考虑附件事件(IE)或AdvestTistListNever(标准)(或类似于类库的原型或jQuery,为您消除差异),以附加事件而不是使用属性。使用属性(也称为DOM0处理程序)是相当老式的,而且有点限制(每个元素每个事件只有一个处理程序)。但它仍然有效。

因此,无法将按钮设置为$uploading=true,然后设置类似window.onbeforeunload=confirmExit;函数confirmExit(){if($uploading=true){return“如果您在上载时离开,您的文件将丢失。确实要退出此页吗?”;}}}类似于此,您的上一条语句不真实;AFAIK(我已经在IE6、7和FF 2和3中进行了测试)onbeforeunload在您以任何方式离开页面时被触发。@Gortok,无可否认,我最近没有进行过测试,但我的理解是,该区域与允许和不允许的内容有很大关系。如果您在计算机上编写代码,您将处于Intranet区域,并且该区域中的权限更为宽松。嗯,为什么要将dataIsDirty设置为false,而它已经为false?在初始加载页面时,如果他们离开页面,您不希望设置该标志。您只希望在他们更改某些内容时设置它。因此,默认情况下,它应该为false。当他们更改某些内容时,它被设置为true,当他们单击“保存”时,它被重置为false。这就是为什么。转换为伪代码的逻辑是if(flag为true){do something}else{set flag false;}。这种逻辑是有缺陷的,当标志已经为假时,你将标志设置为假。我应该澄清:这只是一个细节,总的来说答案是好的,尽管它只允许一次上传。干杯。我不知道清洁剂是什么,另一种已经足够清洁了,但这可以处理另外一种情况(倍数)。