我目前正在建設一個腳本,將通知他們從導航的頁面(這是一個ASP.NET MVC應用程序的BTW)走之前的形式已經改變了用戶。Jquery的形式:使用Memento模式建立一個髒形式通知系統 - exisitng模式?
我首先開始構建一個簡單的腳本,檢測用戶是否更改任何輸入,然後翻轉一下以指定表單爲「髒」。
這結束了過於簡單,缺乏延長表單輸入的支持,所以我在明年受審的插頭。
最好的一個我能找到的是這樣的:http://mal.co.nz/code/jquery-dirty-forms/
這個jQuery髒形式插上的作品不錯,但還是缺少我需要的重要特徵之一;將先前的值與用戶輸入的內容進行比較的能力。例如,如果文本字段最初的值爲「Foo Bar」,並且用戶將該值更改爲「Foo」,則表單現在變髒。
當用戶將該文本框的值更改回「Foo Bar」,然後使用該插件時,表單仍然「髒」,這對我的要求不正確。
則存在無插件做什麼,我需要做的,所以我將不得不建立自己的,這使我對我的問題:什麼是構建這種功能的最佳做法?
我的想法是這樣的:
- 由於這個程序是MVC我可以使用以下技術:
- jQuery的
- JSON
- 數據註解
我最初的想法是:
- 該頁面可以有多種形式;每個表單都會有一個最初設置爲false的屬性「isDirty」。
- 我將需要存儲的原始值的每個字段進行比較(紀念品)
- 每場能有一個類/標記/屬性「isDirty」,這將調出那場「高亮等」
- 我可以將這些字段值存儲在JSON NVP數據結構中
- On提交JavaScript將遍歷該JSON字符串,並查看orignal值,與當前值進行比較,如果該值無效,則會添加「髒」標誌(追加類名稱)到違反髒規則的文本字段。
性能和可重用性是確定的考慮因素。我應該能夠將此模式應用於任何形式,並且只需很少的工作就可以使其消耗原始值並執行驗證。
有沒有人見過的現有模式類似於我的需要?我的想法聽起來可行嗎?有沒有人有更好的路線我可以採取的投入?讓我開始了一個代碼示例我可以擴展將是非常美妙的,僞代碼將是一件好事也。
[更新]
最近有人告訴我什麼,我試圖做的是通常被稱爲「形式藏匿」,但谷歌不會與搜索詞多大幫助。
這個劇本,我一直努力着類似於什麼我想做的事: (此頁:http://www.mydogboris.com/2009/10/using-jquery-data-feature-to-detect-form-changes/)
var formChanged = false;
$(document).ready(function() {
$('#my_form input[type=text].editable, #my_form textarea.editable').each(function (i) {
$(this).data('initial_value', $(this).val());
});
$('#my_form input[type=text].editable, #my_form textarea.editable').keyup(function() {
if ($(this).val() != $(this).data('initial_value')) {
handleFormChanged();
}
});
$('#my_form .editable').bind('change paste', function() {
handleFormChanged();
});
$('.navigation_link').bind("click", function() {
return confirmNavigation();
});
});
function handleFormChanged() {
$('#save_or_update').attr("disabled", false);
formChanged = true;
}
function confirmNavigation() {
if (formChanged) {
return confirm('Are you sure? Your changes will be lost!');
} else {
return true;
}
}