我尝试使用jQuery序列化来确认用户表单内容的更改。看起来很有效。问题是,在我提交表单之前,我将window.onbeforeload重置为null,并希望在用户单击“提交”按钮时不会弹出确认对话框。但是我的代码仍会在点击提交按钮时显示弹出窗口。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery warn page leaving</title>
<link rel="stylesheet" href="../jquery-ui-1.10.4.custom/css/smoothness/jquery-ui-1.10.4.custom.css">
<script src="../jquery-ui-1.10.4.custom/js/jquery-1.10.2.js"></script>
<script src="../jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script>
$(document).ready(function(){
$('#form').data('serialize',$('#form').serialize());
}
);
$(window).bind('beforeunload', function(e){
if($('#form').serialize()!=$('#form').data('serialize'))
return "Data changed.";
else e=null;
// i.e; if form state change show box not.
});
$("#form").submit( function() {
alert("called submit");
window.onbeforeunload = null;
});
function disableBeforeUnload() {
alert ("call disable func");
window.onbeforeunload = null;
}
</script>
</head>
<body>
<a href="http://www.google.com">Go to google</a>
<form id="form" name='experiment' action="#" onsubmit="disableBeforeUnload();">
<Label for='firstName'>First name: </label><input name = 'fname' type="text" size="30" />
<Label for='firstName'>Last name: </label><input name = 'lname' type="text" size="30" />
<select name ='options'>
<option value=1> One</option>
<option value=2> two</option>
<option value=3> three</option>
</select>
<button type="submit" name="submit" />
</form>
</body>
</html>
答案 0 :(得分:1)
使用unbind
功能可能会更好吗?如下:
$("#form").submit( function() {
alert("called submit");
window.unbind('beforeunload')
});
答案 1 :(得分:0)
您需要取消绑定jQuery处理程序,而不是本机onbeforeunload事件。所以使用:
$(window).unbind('beforeunload');
或者现在,首选方法是使用off()
取消绑定:
$(window).off('beforeunload');
on()
用于绑定而不是bind()
。请注意,虽然{@ 1}}和bind()
未被弃用,但仍然可以使用它。