如果你正在談論ASP.NET AJAX部分回發,那麼我今天也遇到了這種行爲,做同樣的事情。 (如果你沒有,完全無視我的職務。)
在到目前爲止我的經驗,這似乎是,如果你的部分回發是由輸入觸發,它不會在局部回傳時觸發onbeforeunload ,但是如果部分回發是由超鏈接觸發的,它會。看起來瀏覽器假設你正在導航,如果你點擊錨標籤中的任何東西(只在IE和FireFox中測試,但是是)。
頁面是否有一個隱藏的字段已經是我用來確定客戶端,當它適合顯示導航離開警告,所以我能夠解決這個很簡單,通過添加一個檢查隱藏字段的值給我的onbeforeunload的if條件,並掛接到PageRequestManager的BeginRequest和EndRequest處理程序來設置值。這有效地禁用部分回發期間的警告。如果你想檢查更多具體的東西,你可以在這裏添加更復雜的邏輯。
這是一個真正過分簡化的代碼示例。 (對不起,如果我回吐和審查到它不工作,但它應該給你一個想法點)
window.onbeforeunload = checkNavigateAway;
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(onBeginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);
function onBeginRequest(sender, args) {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0) {
navigateAwayFlag[0].value = "false";
}
}
function onEndRequest(sender, args) {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0) {
navigateAwayFlag[0].value = "true";
}
}
function checkNavigateAway() {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0 && navigateAwayFlag[0].value == "true")
{
return "Warning Text";
}
}
編輯:壞消息。以上似乎不適用於IE6。它似乎是以不同於Firefox的順序觸發事件,因此onbeforeunload在AJAX beginRequest之前觸發...可能必須找到一種方法,在onbeforeunload觸發之前通過超鏈接單擊更改標誌值。
感謝。閱讀規範,它引用「調用」下的「document.write」。這當然與我們使用的網格庫有關。 – Paul 2009-02-11 20:21:05