2012-12-12 121 views
2

我試圖模仿在這個網站上發現的功能。但它似乎沒有工作。我試圖用jQuery 1.4.4來做到這一點,在我搜索了很多例子後,我可以在這裏找到我以及其他我想到的形式。防止頁面卸載失敗。想法?

$(window).bind('beforeunload', function() 
{ 
    if(show_unsaved_warning == true) 
    { 
     //e.preventDefault(); 
     var exitBeforeSave = confirm('You have unsaved changes'); 
     if(exitBeforeSave == false) 
     { 
      return false; 
     } 
    } 
}); 

它工作的點顯示確認對話框,但無論你點擊確定或取消,頁面仍然加載/重新加載。我需要防止類似於堆棧的方式,所以如果在表單上進行了更改,我可以提示用戶保存更改以防萬一他們忘記了,或者讓他們離開。在這個等式中有什麼我缺少的東西,還是僅僅是不可能的?

請注意我意識到這是一個問題,在這裏被問了十幾遍,在其他地方的幾十個論壇上。如果我能根據我發現的東西拼湊一些東西,否則我不會問。我來到這裏與明顯的重複問題,因爲我目前卡住了。

編輯我改變了代碼一點點與確認對話框的工作,然而,問題仍然非常遺體,並在Firefox我其實引起確定/取消對話框,之後確定/取消是點擊,Firefox會創建另一個提示離開/保持自己的。我怎樣才能避免這種行爲?

+0

'如果(show_unsaved_warning ==真)'是更好的寫作'如果(show_unsaved_warning)'。類似地,if(exitBeforeSave == false)'更好地寫爲'if(!exitBeforeSave)'。我知道這是一個小問題,比較布爾變量與真/假總是得到我的山羊。另外,將camelcase與下劃線混合在一起,以確保功能相同的變量是以無類型語言失去理智的最可靠方法。 (是exitBeforeSave還是exit_before_save ???直到運行時纔會知道)。 –

回答

2

爲什麼使用onbeforeunload進行確認?它默認是這樣做的。

你過時的jQuery版本

$(window).bind('beforeunload', function() { 
    if(show_unsaved_warning == true) { 
     return 'You have unsaved changes.'; 
    } 
}); 

jQuery的1.7+

$(window).on('beforeunload', function() { 
    if(show_unsaved_warning == true) { 
     return 'You have unsaved changes.'; 
    } 
}); 

jsFiddle

+0

不幸的是,直到我的公司給我一個完整的重建綠燈我堅持使用jquery 1.4.4我試圖帶來一個新版本的獨立和使用noconflict和軟件打破了原作者把一個糾結的混亂的代碼在一起..無論如何你說明過時的方式失敗了我的作品,但仍然繼續加載下一頁或重新加載,因爲我試圖確認 – chris

+0

之前,當你點擊取消下一頁不應加載。你說它仍然加載? – epascarello

+0

不幸的是 – chris