2012-09-24 42 views
1

我在卸載和卸載方法之前遇到了一些問題。我認爲我在onload方法中設置了代碼,只是在onbeforeunload的確認方法設置爲true後纔開始。但遺憾的是,情況並非如此,即使將onbeforeunload方法設置爲false並且該人希望停留在網站上,卸載方法也正在開始。這是我工作的代碼自從我開始希望它變好以來已經改變了很多。我相信這不是因爲它不按我想要的方式工作。onbeforeunload和onunload讓另一個在另一個之後工作

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(); 
}); 

回答

3

onbeforeunload不像你認爲的那樣工作。你可以從處理程序返回一個字符串,這會提示一個消息,或者什麼都不會做的undefined

window.onbeforeunload = goodbye; 

function goodbye(e) { 
    if (!validNavigation) { 
     return leave_message; 
    } else { 
     return undefined; 
    } 
} 

相關:Way to know if user clicked Cancel on a Javascript onbeforeunload Dialog?

+0

所以沒有得到它,我希望它再工作方式的方法是什麼?或者如果按下取消按鈕,可以採取一種真正的做法嗎? –

+0

超時綁定是否可以在您向我展示的文章中以這種方式工作? –

+1

@GilbertV正確,你可以判斷導航是否被取消的唯一方法是運行'setTimeout'。 – jbabey