当用户关闭窗口时,Onbeforeunload不会在IE中触发

Onbeforeunload not firing in IE when user closes window

本文关键字:IE Onbeforeunload 用户 窗口      更新时间:2023-09-26

我通过绑定所有输入字段的'change'事件来监视表单中的每个字段的更改,并在任何更改时设置标志。
然后我绑定到窗口。Onbeforeunload并检查该标志,如果设置了该标志则返回警告。根据Jquery API文档,我直接绑定到window。Onbeforeunload和$(window)孰轻孰重

我有以下代码:

$(':input').change(function(){
    if($('#editObject_blah').attr('value') == 0){
        $('#editObject_blah').attr('value',1)};
    }
);
window.onbeforeunload=verifyexit;
function verifyexit() {
    if($('#editObject_blah').attr('value') == 1){
        return'You have not saved your changes!';
    }
};

编辑:元素editObject_blah实际上是这样的:

<form id="editObject_blah" onSubmit="return false;" value=0>

在Firefox和Chrome中可以正常工作,但在IE 7中无法捕获用户关闭浏览器窗口。

我应该注意到,上面的代码是通过eval()作为ajax请求的结果调用的,而不是通过内联脚本标记加载的。我不认为这应该有什么不同,但这就是我在这里问的原因。

谢谢。

你不应该使用".attr()"来获取"value"属性:

if ($('#editObject_blah').val() == 1) {
  return "whatever";
}

如果处理程序没有返回字符串,则浏览器认为用户关闭窗口没有问题。

如果这不是一个<input>,那么你可能应该用".data()"来存储标志。要做到这一点,您只需为标志选择一个名称:

$(':input').change(function(){
  $('#editObject_blah').data("changed", 1);
});
function verifyexit() {
  if($('#editObject_blah').data('changed') == 1){
    return "You have not saved changes yet!";
  }
}