【问题标题】:Jquery help needed for onbeforeunload eventonbeforeunload 事件需要 Jquery 帮助
【发布时间】:2011-01-12 12:42:50
【问题描述】:

我在 asp.net 应用程序中使用 jquery onbeforeunload 事件。 如果我编写如下所示的事件,则其工作正常并显示确认对话框。

var vGlobal = true;
var sMessage = "Leaving the page will lost in unsaved data!";

[工作]

> window.onbeforeunload = function() {
>   if (vGlobal == false) return
> sMessage; }

但如果我使用如下所示的绑定方法,它就不起作用

[不工作]

$(window).bind("beforeunload", function(e) {
    if (vGlobal == false)
        return sMessage;
});

有人告诉我为什么它不起作用。这两种方法有什么区别吗?

aspx 上的代码:

<asp:TextBox ID="txtName" runat="server"></asp:TextBox>

CLICK ON THIS LINK TO SEE RUNNING EXAMPLE

【问题讨论】:

    标签: asp.net jquery onbeforeunload


    【解决方案1】:

    updated version

    您需要在文档就绪事件中绑定所有事件。

    【讨论】:

    • 感谢 rahul 的回复。实际上问题是我使用的是 jquery 版本 1.3.2。现在我得到了 v1.4.4 并且工作正常。还有一个问题我们是否已写入 $ 中的所有 jquery 代码(document).ready函数??一定要吗??
    【解决方案2】:

    除了 vGlobaltrue 并且您正在检查 if (vGlobal == false) 之外,这听起来像是 $(document).ready() 问题。

    即您应该将声明放在 document.ready() 处理程序中,如下所示:

    $(document).ready(function(){
        $(window).bind("beforeunload", function(e) {
            if (vGlobal == false)
                return sMessage;
        });
    });
    

    【讨论】:

      【解决方案3】:

      使用 jQuery 将事件绑定到窗口没有任何好处 - 您所做的只是增加了让 jQuery 将窗口解析为 jQuery 对象的开销,而您甚至没有使用它。

      因此,使用:

      window.onbeforeunload = handler;
      

      比使用jQuery绑定这个事件更可取。

      您仍然可以在文档就绪部分执行绑定:

      $(document).ready(function () {
          window.onbeforeunload = handler;
      };
      

      【讨论】:

      • 其实使用jQuery有一个好处。如果有多个 $(window).bind("event"... 声明,则函数调用会被堆叠。 window.onbeforeunload = handler; 将替换原来存在的任何内容。
      • 但是在这种情况下没有多个事件处理程序——如果有的话你仍然可以将所有函数包装在一个事件处理程序中——所以真的没有任何好处。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      相关资源
      最近更新 更多