jQuery .val()和.attr('value')有什么区别?


Answers:


82

.val()可以以一种有用的方式对所有输入类型的元素起作用,包括<select>...甚至在<select multiple>,复选框和单选按钮的情况下(在其中也.val()可以获取或设置一选定值,而不仅仅是一个字符串)。

因此,即使.attr('value')在某些情况下,例如文本框,它们的行为相同,但基本上它们具有不同的目的。首选方法是.val()在任何地方都获得一致的行为。


只是为了踢球,下面是一个鲜为人知的复选框示例,它.val()很方便:

<input name="mytest" type="checkbox" value="1">
<input name="mytest" type="checkbox" value="2">
<input name="mytest" type="checkbox" value="3">
<input name="mytest" type="checkbox" value="4">

你可以这样做:

$("input[name='mytest']").val([1, 2, 3]);

....这将选中前3个框。 您可以在这里尝试一下


1
感谢您鲜为人知的示例。
ScottE 2011年

1
写得很好!您可能想在跨浏览器标准化中添加一个简短的解释,这是jQuery使用此类方法进行的。
mekwall 2011年

11
还要注意,它.attr('value')读取的是原始值,而不是当前状态。也可以看看。
XML

9

.attr('value')还会返回编辑输入字段之前的值。.val()返回当前值。


2

为了增加Actis的答案...

.attr('value')还会返回编辑输入字段之前的值。.val()返回当前值。

当使用文本输入字段时,.attr()和.val()的设置方法工作方式不同。

.val('newval')

将设置用户在页面上看到的值,并更新随后的.val()方法调用返回的值。它不会设置元素的value =属性。

OTOH

.attr('value','newval')

将在元素上设置value =属性。如果用户尚未键入并且尚未调用.val(newval),则这样做还将直观地更新控件并更新.val()返回的值。

您可以使用以下jsfiddle进行进一步调查:

https://jsfiddle.net/jasonnet/vamLww2k/

祝好运。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.