這似乎是一個常見問題,但搜索沒有返回任何內容。如何判斷ASP中的頁面卸載是否回傳
我有下面的代碼,在頁面卸載之前執行。問題是如果卸載是回發我不想向用戶發出我的警告,但我無法弄清楚如何區分回發和例如,用戶導航到另一個頁面。
// This is executed before the page actually unloads
$(window).bind("beforeunload", function() {
if (prompt) {
//prompt
return true;
}
else {
//reset our prompt variable
prompt = true;
}
})
在後面的代碼中運行腳本,即如果Page.IsPostBack然後設置提示不是一個選項。
任何想法?
編輯:
這裏是我結束了與解決方案:
function DoNotPrompt() {
prompt = false;
}
我加入這個到用戶能做到這一點導致回發東西的所有控制。
OnClientClick="DoNotPrompt()
然後檢查此標誌,並且只在用戶真正離開頁面時才返回「beforeunload」中的字符串,即不是回發。我不得不使用此代碼: var magicInput = document.getElementById('__ EVENTTARGET');
if (magicInput && magicInput.value) {
// the page is being posted back by an ASP control
prompt = false;
}
原因是我有一個自定義用戶控件是一個列表框,我無法添加上述方法。所以用它來捕獲該事件並將該標誌設置爲false。
不是最優雅的解決方案。
感謝, 邁克爾
@Aristos magicInput如果在DOM中沒有找到,它將會是'null'(falsey),如果它被發現但沒有被設置,它的值將是一個空字符串(falsey)。該語句檢查隱藏的輸入是否存在並且具有值。 – jbabey
好的,我認爲它是一個想法 - 我只是沒有測試它,必須確保在所有情況下,__EVENTTARGET在回發之前都會發生變化。在這裏,我看到這是在__doPostBack被調用時的改變。 – Aristos
我試過這個,但是正如你所說的那樣,由於某種原因它並沒有捕獲所有的回傳。比如用戶在我們的網格中編輯行時。 –