首先,你提供的服務將不會因爲this
工作的代碼是指document
的input
元素代替。你需要更新你的代碼:
jQuery(function ($) { //aliasing document.ready shortcut, good practice
"use strict";
$('input').data('initial-value', $('input').val());
});
當然,這可能不會做你想做什麼或者,因爲它會設置每輸入元素存儲第一的初始值輸入元素(.val()
返回第一個匹配元素的值)。
所以更新的代碼爲各種元素,你會使用:
jQuery(function ($) {
"use strict";
$('input').each(function() {
$(this).data('initial-value', $(this).val());
});
});
但是,我們需要進入你爲什麼要打擾存儲元素的初始值問題首先。如果有人改變輸入元素與$(someElement).val('new value');
值,輸入可以通過其值設置回它被重置的[value]
屬性:
$(someElement).val($(someElement).attr('value'));
如果,另一方面,你設置的input
的價值元素與$(someElement).attr('value', 'new value');
,你做錯了,並正在破壞你的input
元素的狀態。 reset
按鈕依賴於保留原始狀態的[value]
屬性,因此當form
重置時,輸入可以返回到其原始狀態。
還提到:
的問題是,上述的input
字段的初始值不存儲在數據屬性initial-value
。該屬性未被創建。
當您使用.data()
訪問一個元素上的數據,它將從[data-*]
屬性提取信息,如果[data-*]
屬性都存在。這對初始化元素上的數據非常有用。
當您使用.data(key, value)
將數據與元素相關聯時,它會將該值作爲屬性存儲在該元素上; 它不會更新屬性值。沒有辦法序列化例如new Foo
這樣的實例化對象,以便可以將其反序列化爲原來的方式。
如果您想驗證對象的數據設置是否正確,則不能簡單地使用DOM檢查器,您需要實際檢查該特定元素的內容.data()
。
For more information about the differences between .attr()
and .data()
, see my answer to this related question。
當您使用jQuery的'data'方法,它不更新的屬性值,但它確實* *數據與元素相關聯。 [查看我對有關問題的答案以獲取更多詳細信息](http://stackoverflow.com/questions/7261619/jquery-data-vs-attr/7262427#7262427)。 – zzzzBov