jQuery, onBeforeUnload and ASP.Net form

3
我有一个解决方案,可以防止用户意外离开我的注册页面:

我有以下解决方案,可以防止用户意外离开我的注册页面:

var warning = true;

function CheckExit() {
    if (warning) {
        return "Changes done. Remember to save, blah blah.";
    }
}
window.onbeforeunload = CheckExit;

addToPostBack = function (func) {
    var old__doPostBack = __doPostBack;
    if (typeof __doPostBack != 'function') {
        __doPostBack = func;
    } else {
        __doPostBack = function (t, a) {
            if (func(t, a)) old__doPostBack(t, a);
        }
    }
};

$(document).ready(function () {

    $('#aspnetForm').submit(function () {
        warning = false;
        return true;
    });

    addToPostBack(function (t, a) {
        warning = false;
        return true;
    }); 

});

大部分代码来自于StackOverflow上的不同问题,我的本地调试页面可以正常工作,所有ASP.Net控件(链接按钮、按钮)都可以点击而不会出现警告,但是当用户尝试关闭窗口或导航离开时,警告就会显示。
然而,当部署到服务器上时,当我点击ASP.Net控件时也会弹出警告(我真的不想在用户单击“保存”按钮时警告他的更改未保存)。现在,我的本地调试页面和服务器之间有一个区别:服务器使用一个带有一些广告的不同MasterPage,但是经过使用Firebug进行调试后(请参见下一段),我看不出这应该有什么区别。
我尝试运行JavaScript代码的不同部分,通过使用Firebug确认所有内容已正确加载(我的第一个猜测是包含$('#aspnetForm')的部分没有被加载,因为这似乎是不同之处),但是根本没有任何改进。警告仍然会在每次单击链接或按钮时弹出。
我主要的问题是,我认为我不完全理解addToPostBack函数的作用,因此无法正确调试它。
这里是否有人有任何想法可能出了什么问题?

当客户点击保存按钮时,为什么不只是将“warning = false”设置为假呢? - Naor
因为有很多合法按钮;切换选项卡,添加内容等。在所有这些内容中添加"warning=false;"是很费力的工作,我想避免,并且随着表单的编辑,它也很麻烦维护。 - Erlend D.
@Erlend D 我也遇到了同样的问题。你是如何解决这个错误的?请帮忙一下。 - ajm
@Ashish:我不记得确切的解决方案,但我认为James Ellis-Jones是对的:JavaScript文件中存在冲突。我所做的可能是删除所有内容,然后重新添加直到出现错误。然后我知道了问题出在哪里。 - Erlend D.
2个回答

1
这只是一个猜测,但您可能没有传统的反冲突设备,如 (function ($) { code here })(jQuery); 因此,某些内容可能与jQuery对“$”的定义发生冲突,从而阻止执行代码时出现异常,当有人提交回传时。

0

我同意James的观点。大多数时候都会出现这种冲突,我建议使用noConflict()。 编程愉快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接