jquery beforeunload不显示消息

时间:2012-10-25 07:22:00

标签: jquery onbeforeunload

这方面的问题是http://jsfiddle.net/whDm6/18/

如果我在以下代码中取消注释警报,更改表单值并刷新页面,则会显示警报。所以我知道代码正在执行到那一点。但是,如果我将Alert留下注释,它就不会像我期望的那样显示beforeunload框。

我尝试过使用bind并使用基本window.onbeforeunload = function(){}而不用Jquery绑定它,但没有一个工作。

使用Jquery 1.8.2

var currentUlValues = {};
currentUlValues['input1'] = "red";
currentUlValues['input2'] = "blue";
needToConfirm = true;

$(window).on('beforeunload', function(){
    if (needToConfirm) {
        $.each(currentUlValues, function(key, value) {
            var elem = $("#"+key).val();
            if (typeof elem !== 'undefined') {
                if (elem != currentUlValues[key]) {
                    //alert(elem + " - " + currentUlValues[key]);
                    return 'Are you sure you want to leave?';
                }
            }
        });
    }
});

HTML表单

<form>
    <input id="input1" name="input1" type="text" value="red" />
    <input id="input2" name="input2" type="text" value="blue" />
</form>

4 个答案:

答案 0 :(得分:2)

您从.each的回调函数返回,该函数的范围是错误的,您应该将字符串返回到它之外。

The working demo:

$(window).on('beforeunload', function(){
    var is_return = false;
    if (needToConfirm) {
        $.each(currentUlValues, function(key, value) {
            var elem = $("#"+key).val();
            if (typeof elem !== 'undefined') {
                if (elem != currentUlValues[key]) {
                    is_return = true;
                    // here return false is to stop the iterate
                    return false;
                }
            }
        });
        if (is_return) {
            return 'Are you sure you want to leave?';
        }
    }
});

答案 1 :(得分:0)

return正在返回$.each匿名函数而不是beforeunload函数

答案 2 :(得分:0)

请在此处查看答案Dialog box runs for 1 sec and disappears? 简短的说法:

  

beforeunload使用内置于浏览器的方法,您需要   返回一个字符串,浏览器将显示该字符串并询问   用户是否想要离开页面。

     

您不能使用自己的对话框(或jQueryUI模式对话框)来   覆盖beforeunload。

答案 3 :(得分:-1)

也许你应该使用

return confirm('Are you sure you want to leave?');