2

我正在使用 javascript window.onbeforeunload 函数在用户尝试离开页面而不提交数据时向用户显示警报。这种功能运行良好。

问题出现在 IE 中(仅),即使点击内部链接,window.onbeforeunload 事件也会触发

<a class="editlink" onclick="fnEditLink(this);" href="javascript:void(0);" > <img src="/images/newstyle/pencil.png" alt="edit" /> Edit </a>

这是一个内部链接,用于在不进行任何重定向或 ajax 调用的情况下编辑网格行。只是对 html DOM 结构中新创建的行进行简单的编辑。

这是我在页面中使用的 javascript 代码:

<script>
var is_clicked = false;
$(document).ready(function(){
    $('#get-a-quote-step2').submit(function(){
        is_clicked = true;
        return validate('get-a-quote-step2');
    });
    $('#skip_step, form input').click(function(){is_clicked = true;});
});

window.onbeforeunload = function() {

    if(!is_clicked)
        return false;
}
is_clicked = false;
<script>

在 Firefox 上一切正常,但在 IE 上却产生了问题。我正在使用 IE 8 来测试这些东西,但我想问题出在所有版本的 IE 上。

在我上面的代码中,问题是如果我点击一个内部链接,它会将 is_clicked 标志设置为 true,然后如果我按下刷新按钮,我可以重新加载页面,而无需询问用户是否离开,他将丢失所有未保存的数据。

我在想是否有 esp;在 JQuery 中,以便我们知道是否未单击某些特定链接,例如 isNotClicked() ?或者,如果我的问题有任何其他解决方案,这是最受欢迎的。

4

1 回答 1

2

因此,如果您只想阻止某些链接触发 onbeforeunload 事件,您可以在 click 事件声明中简单地返回 false ...

<a href="http://google.com">Call unload first and load a page</a>
<a href="javascript:void(0);" id="request">Do an ajax request</a>
<script>
$(document).ready(function(){
    $('#request').click(function(e){
        //do some stuff
        //returning false wil prevent the onbeforeunload event from firing
        //but also will not redirect if the link has an href
        return false;
    });
});
window.onbeforeunload = function(e){
        return 'Want to leave?';
}

</script>
于 2012-08-12T00:31:22.470 回答