2011-10-21 88 views
5

我有一個頁面,我想確認用戶是否想離開。 我必須確認,只有當特定條件得到滿足,所以我寫了這樣的代碼如何防止onbeforeunload在滿足特定條件時發射?

var back=false; 
back=//check if user pressed back button 
window.onbeforeunload = function (e) { 
    alert(back); //this alerts true 
    if(back==true) 
     return false; 
     //e.preventDefault; --this does not work too 
}; 

但這不起作用。我的意思是當我點擊後退按鈕時,這個onbeforeunload仍然會觸發,即使我返回false,我仍然會收到確認消息。什麼可能是錯誤的? 謝謝

回答

11

如果您想向用戶提供一個選項以中止卸載,則返回一個字符串。其他情況下不返回。

var back = false; 
back = true; //Somewhere, the condition is set to true 
window.onbeforeunload = function (e) { 
    if(back == true) 
     return "Are you sure to exit?"; 
} 
+1

不,你不能改變的確認消息,哈哈(開玩笑) – david

+1

@lovesh瀏覽器在使用標準文本中的「onbeforeunload」確認對話框的他們自己的,永遠顯示,而不是所有人都會顯示你已經返回給用戶的文本。 –

+0

@lovesh'在你的代碼中返回false'**做了**。你忘記了設置'back = true'。 –

0

您還可以考慮不設置window.beforeunload事件,直到滿足您的條件列表。

var confirmUserToLeave = function() { 
    if (/* conditions are met */) { 
     window.unbeforeunload = function (e) { 
      /* whatever you want to do here */ 
     }; 
    } else { 
     window.unbeforeunload = undefined; 
    } 
}; 

然後,只要在某些事件上調用該方法,可能會改變'條件得到滿足'的結果。

+0

任何想法爲什麼在我的代碼中返回false'不起作用? – lovesh

1
$(window).bind('beforeunload',function() { 
    return "'Are you sure you want to leave the page. All data will be lost!"; 
}); 

$('#a_exit').live('click',function() { 
    $(window).unbind('beforeunload'); 
}); 

試試這個。以上代碼適用於大多數情況。

0

條件後端

var confirmExist = function (e) { 
    return true; 
} 
window.onbeforeunload = confirmExist; 
http get, post request 
.then(function(r)) { 
    window.onbeforeunload = null; 
} 
相關問題