簡體   English   中英

setTimeout(x,0)在Chrome中不延遲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM