1

I have

<span class="cssButton"><a href="javascript:void(0);" class="buttonBlue" onclick="swfu.startUpload();"> <img src="http://uber-upload.com/img/icons/up_16.png" alt=""/> Uber-Upload! </a></span>

And i want to make it so that if you press that button, it also sets a variable that makes it so that if you try to leave the page, it will pop up one of those "Are you sure you want to leave this page" alerts to prevent people from accidently leaving while there is an upload going on.

Dont worry about unsetting the variable after the upload finishes, i'll add that, i just need one of you smart coders to make me a framework.

Thanks!

4

3 回答 3

1
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;
}

然后你就像在onbeforeunload事件中一样使用它。

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

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

于 2009-08-20T20:26:09.897 回答
1

将此声明添加到页面:

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 的情况下,这将起作用。大多数时候,他们中的大多数人都会这样做。他们没有的地方,好吧,你试过了。请注意,通过使用计数器,您允许多次上传。

您可能会考虑使用 attachEvent (IE) 或 addEventListener (standard)(或像 Prototype 或 jQuery 这样的库来为您消除差异)来附加您的事件而不是使用属性。使用属性(又名 DOM0 处理程序)相当过时并且有点限制(每个元素每个事件只有一个处理程序)。但它仍然有效。

于 2009-08-20T20:35:46.803 回答
0

依靠 onbeforeunload 充其量是粗略的。因为垃圾邮件发送者以与您暗示人们这样做的能力相同的方式滥用该行为已基本上被删除。

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

于 2009-08-20T20:24:04.283 回答