我通过绑定到所有输入字段的'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请求的结果调用的,而不是通过内联脚本标记加载。我不认为这应该有所作为,但这就是我在这里问的原因。
谢谢。
答案 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!";
}
}