我在window.onbeforeunload下面有javascript代码。按下浏览器后退按钮时,我在按钮单击方法后面调用代码。
现在问题是在$("#buttonclientid").click()
完成之前光标没有停止。只需调用方法并转到下一个语句。如何保持或停止光标直到$("#buttonclientid").click()
完成,然后转到下一步?
var form_has_been_modified = 0;
$(function () {
$("input").keyup(function () {
form_has_been_modified = 1;
})
window.onbeforeunload = function (e) {
if (!form_has_been_modified) {
return;
}
doYouWantTo();
}
});
function doYouWantTo(){
doIt=confirm('Do you want to save the data before leave the page?');
if (doIt) {
var returnbutton;
//cursor should stop here until click function completes.
returnbutton = $("#buttonclientid").click();
}
else{
}
}
答案 0 :(得分:1)
我相信你的问题在于你的doYouWantTo
函数没有返回值传递回onbeforeunload
,所以它在离开页面的同时还运行函数,而不是等到它完成了。
你最好的行动就是:
return doYouWantTo()
....
if(doIt) {
$('#buttonclientid').click(function() { // unsure if you can attach callback to click but idea is same
return true;
});
} else {
return true;
}
答案 1 :(得分:0)
将事件处理程序绑定到onbeforeunload
事件时,它应返回以下两种情况之一:
undefined
(或根本不返回,同样的效果)话虽如此,您的代码看起来应该是这样的:
var form_has_been_modified = false;
$("input").keyup(function () {
form_has_been_modified = true; // use a boolean :P
});
window.onbeforeunload = function (e) {
if (form_has_been_modified) {
return 'Do you want to save the data before leave the page?';
} else {
return undefined; // this can be omitted if you prefer
}
};
告诉用户点击系统对话框的唯一方法是使用setTimeout
。有关该主题的详细信息,请参阅this question。