首先,你提供的服务将不会因为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