jQuery.each在window.onbeforeunload函数中不起作用

时间:2015-08-21 23:57:02

标签: javascript jquery

我有这段代码:

HTML:

<div id="wrapper">
    <div>d</div>
    <div>s</div>
    <div>w</div>
</div>

JS:

window.onbeforeunload = function(e) {
    $('#wrapper>div').each(function(k,v) {
        if($(this).text() == 's') {
            return 'aaaa';
        }
    });
}

http://jsfiddle.net/edhvkhg7/2/

当我尝试关闭Chrome标签时,不会显示确认弹出窗口。为什么呢?

2 个答案:

答案 0 :(得分:4)

您只是从迭代函数返回,而不是从beforeunload处理程序返回。 jQuery对函数返回值的唯一作用是测试它是否为false,并停止迭代。它不会从包含函数返回。

window.onbeforeunload = function(e) {
    var return_val = null;
    $('#wrapper>div').each(function(k,v) {
        if($(this).text() == 's') {
            return_val = 'aaaa';
            return false; // End the loop
        }
    });
    return return_val;
};

答案 1 :(得分:1)

window.onbeforeunload = function(e) {
    $('#wrapper>div').each(function(k,v) {
        if($(this).text() == 's') {
            $(this).text('aaaa');
        }
    });
}