如果我在頁面中進行了任何更改,然後嘗試在未保存的情況下導航,我需要一條錯誤消息來詢問我們是否要保存更改。如何檢查頁面中是否發生了變化?
1
A
回答
1
onbeforeunload
事件是你需要的。 綁定一個函數返回一個string
,當用戶嘗試離開(按下,向前,點擊鏈接,關閉標籤或窗口本身)時,將顯示一個string
(僅適用於Chrome,其他瀏覽器將顯示默認消息)這一頁。
一個確認對話框一樣呈現給用戶,如果用戶選擇繼續,他要求被執行的操作。如果他選擇留在頁面上,則什麼都不會發生。
$('input').change(function(){
window.onbeforeunload = function(){
//Return the message that should be displayed in Chrome.
// Other browsers will show default message.
return "You have unsaved changes on this page";
};
});
當保存更改簡單的設置window.onbeforeunload = null
刪除消息時用戶嘗試導航離開該頁面。
0
有幾件事情要考慮。
您使用什麼元素進行輸入。這將影響你的elementSelector(在下面的代碼中使用) 如果你使用可插入的插件,你必須知道比用於輸入的元素更多的東西。您還需要知道用於顯示值的元素。
如果您綁定改變,如sudhirs回答,我建議用活,而不是綁定這樣你自動地支持就地編輯這樣做。
,你就改變事件設置一個標誌,並不包括用戶改回原來的情況下該標誌的解決方案。
下面的代碼的想法是遍歷所有要監視和存儲原始值的元素。然後比較卸載值,如果發現有變化,則應給出警告。
$(function(){
function getVal(){
var val,node = $(this),nodeType = node.attr('type');
if(this.nodeName.toLowerCase() == input){
if(nodeType === "checkbox" || nodeType === "radio"){
val = node.attr('checked');
} else{
val = node.val();
}
} else{
val = node.text();
}
return val;
}
$(elementSelector).each(function)({
$(this).data('original',getVal.Call(this));
});
window.onbeforeunload = function(){
var hasChanges;
$(elementSelector).each(function(){
var org = $(this).data('original'),val = getVal.call(this);
hasChanges = hasChanges || (org !== val)
});
if(hasChanges){
return "Are you sure you wish to leave this page. Changes will be lost");
}
};
});
如果用戶停留在頁面上保存(即數據被髮布到使用AJAX服務器),您將需要更新的存儲值,以使後續的變化正確地再次trickers的消息後,卻沒有短信如果用戶在保存後沒有改變任何東西,則打三分。
相關問題
- 1. 如何檢查是否變量的值發生了變化
- 2. 如何檢查XmlDocument是否發生了變化?
- 3. 檢查觸發器中是否發生了變化
- 4. 檢測網頁是否發生變化
- 5. 如何檢測變量是否發生了變化?
- 6. 如何使方法檢測變量是否發生了變化?
- 7. 檢查更改後值是否發生了變化()觸發器
- 8. 要找出一個* .aspx頁面是否發生了變化
- 9. 如何檢查django中用戶的組是否發生了變化?
- 10. 使用jQuery來檢查收音機是否發生了變化
- 11. 反覆檢查子對象是否發生了變化
- 12. NetLogo - 檢查文件是否發生了變化
- 13. 檢查編譯後的dll是否發生了變化?
- 14. 如何檢查文件哈希值是否發生了變化用PHP
- 15. 如何檢查使用foreach時DataTable行是否發生了變化?
- 16. 檢查redis變量在nodejs中是否發生了外部變化
- 17. 檢查vb.net中的任何一個或兩個texbox是否發生了變化
- 18. 檢測observableArray中是否發生了變化
- 19. 如何判斷Postgres中的記錄是否發生了變化
- 20. 檢查JSON數據是否發生了變化併發出警報行
- 21. 如何檢測Angular 2中的屬性是否發生了變化?
- 22. 如何檢查WKWebView中是否加載了有效頁面?
- 23. 如何檢測Excel中列值是否發生變化vba
- 24. 檢測實體框架對象是否發生了變化
- 25. 如何檢查是否引發了ArgumentError?
- 26. EF4如何確定房產是否真的發生了變化?
- 27. 如何確定nHibernate對象是否發生了變化
- 28. 查找鼠標在mousedown期間是否發生了變化
- 29. jQuery:如何檢測html在給定元素內是否發生了變化?
- 30. 我如何知道Grails域名POJO是否在檢索後發生了變化?
這可能有所幫助。檢查此:http://stackoverflow.com/questions/1235024/asp-net-jquery-dirty-forms-and-window-onbeforeunload – TRR 2012-04-24 06:18:44
@ rutwick - 它可能比沒有更好,而不是在每一個點擊監聽器表單控件,在這種情況下最好有一個* beforeunload * listener並測試表單控件的當前*值*和它們的* defaultValue *,並在表單提交時移除偵聽器,以便在不需要時不會調用它。 – RobG 2012-04-24 06:38:59