2012-09-24 65 views
1

我想讓onbeforeunload使用一個設置的定時器的種類,但我似乎無法得到它啓動時,返回到位。我希望它能與定時器一起工作,但由於某種原因定時器不工作。這裏是我工作的代碼,非常感謝你的幫助。Getting onBeUnUnload使用setTimeout

var validNavigation = false; 

function wireUpEvents() { 
    var leave_message = 'Leaving the page'; 

    jQuery(
     function goodbye() { 
      jQuery(window).bind('onbeforeunload', function() { 
       setTimeout(function() { 
        setTimeout(function() { 
         jQuery(document.body).css('background-color', 'red'); 
        }, 10000); 
       },1); 

      return leave_message; 
     }); 
    }); 

    function leave() { 
     if(!validNavigation) { 
      killSession(); 
     } 
    } 

    //set event handlers for the onbeforeunload and onunloan events 
    window.onbeforeunload = goodbye; 

    window.onunload=leave; 
} 

// Wire up the events as soon as the DOM tree is ready 
jQuery(document).ready(function() { 
    wireUpEvents(); 
}); 
+0

發佈問題時,請正確設置代碼格式,使其更容易理解其內容。它也會幫助你的自我,任何體面的代碼編輯器都會有一個'indent'或'format'功能,可以幫你完成工作。對於SO使用空格而不是製表符,並在每行前加4個空格以使代碼塊顯示爲代碼。 –

+0

對不起,我發佈的代碼總是很複雜,不要以爲我會非常安靜地得到它。 –

回答

3

onBeforeUnloadsetTimeout工作。 onBeforeUnload執行後,onUnload將被觸發,頁面將會改變。這發生在調用setTimeout回調之前。

+0

感謝@約翰的答案。如果我需要在onbeforeunload被觸發的特定時間段之後執行方法,您是否知道任何方式? –

+0

@AdarshKumar在用戶嘗試離開後阻止頁面退出的唯一方法是將同步代碼放入onbeforeunload/onunload處理程序中。你在技術上可以放置一個執行循環,直到經過一定的時間,但這樣會效率低下並阻止用戶界面。 –