jQuery访问文本区域的默认值

时间:2014-11-07 15:34:29

标签: javascript jquery html

如果我有文本输入并在HTML中设置了默认值,那么在jquery使用.val()更改当前值之后是否仍然可以访问原始值?

我的理解是jQuery应该更改值 property 而不是值属性

编辑:注意我不会问我如何存储默认值以便稍后检索它(例如在数据或var中)我对jQuery修改属性的原因感兴趣输入字段(以及defaultValue)而不仅仅是属性

对于这个例子:

<input id="me" type="hidden" value="starting value" />

<script>
var $field = $('#me');
console.log($field.val());
console.log($field.prop('defaultValue'));
console.log($field.val('new value'));
console.log($field.val());
console.log($field.prop('defaultValue'));
console.log($field.attr('value'));
console.log($field.prop('value'));
</script>

我们看到:

starting value
starting value
[input#me, context: document, selector: "#me", jquery: "2.1.0", constructor: function, toArray: function…]
new value
new value
new value
new value

小提琴:

http://jsfiddle.net/jLsqmxg7/1/

1 个答案:

答案 0 :(得分:1)

jQuery“val”setter总是更改属性和属性。他们这样做是为了不让开发人员混淆不明确的行为。如果您确实只想更改属性并让tag属性具有相同的值,请执行以下操作:

var $input = $("<input>", {value: 'original'}); // Using the jQuery constructor to create a input :)
$input[0].value = "foo"; // Changing the value property of this HTMLInputElement instance

console.log($input.val()); // foo
console.log($input.prop('value')); // foo
console.log($input.attr('value')); // original

这样,您只更改了HTMLInputElement值属性,而不是标记属性。 所以,我说,这会让代码变得有点混乱。