[英]setTimeout(x, 0) not delaying in Chrome
我有一個帶有表格的網頁; 如果用戶離開,我想警告他們。 我還沒有實現臟檢查,所以我的onbeforeunload
代碼很簡單
window.onbeforeunload = function () {
return 'message'
};
他們提交表單時,我不希望收到此警告,因此我在提交時刪除了該事件。 但是,提交可能會失敗 ,因此我需要在事后將事件放回原處(因此,如果他們隨后離開,他們仍然會收到警告)。 為此,我做了以下工作:
var tempDisableBeforeUnload = function() {
var obu = window.onbeforeunload;
if (obu) {
window.onbeforeunload = null;
setTimeout(function() {
window.onbeforeunload = obu;
}, 0);
}
}
$("form.noWarnOnSubmit").submit(tempDisableBeforeUnload);
這在Firefox和IE中可以正常工作setTimeout(x, 0)
推遲事件處理程序的恢復,直到submit
決定成功與否之后 。
但是,在Chrome中,超時似乎立即發生,並且在提交表單時收到警告。
如何在Chrome上執行此操作,或者如何才能達到“不要警告提交,但如果提交失敗,請放回警告”的結尾?
不能執行以下操作:
var unloadActive = true;
window.onbeforeunload = function () {
if(unloadActive) return 'message'
};
$("form.noWarnOnSubmit").submit(function(event){
unloadActive = false;
// do all your checks and things, whatever, and if the checks fail:
unloadActive = true;
});
然后,您無需進行所有可能導致問題的功能處理。 我還沒有測試過,但這就是我要做的。
我已經克服了我眼前的問題
submit
事件綁定,將我的事件綁定到jQuery驗證事件之后觸發: $(function() {
$("form.noWarnOnSubmit").submit(disableBeforeUnloadIfNotCancelled);
});
submit
事件被取消的情況下才取消綁定onbeforeunload
事件。 var disableBeforeUnloadIfNotCancelled = function (e) {
if (!e.isDefaultPrevented()) {
window.onbeforeunload = null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.