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

时间:2011-07-13 19:02:10

标签: javascript jquery internet-explorer firefox onbeforeunload

我通过绑定到所有输入字段的'change'事件来监视表单中的每个字段以进行更改,并在任何内容被修改时设置标志。
然后我绑定到window.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请求的结果调用的,而不是通过内联脚本标记加载。我不认为这应该有所作为,但这就是我在这里问的原因。

谢谢。

1 个答案:

答案 0 :(得分:1)

您不应该使用“.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!";
  }
}