我觉得标题很清楚
Answers:
.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个框。 您可以在这里尝试一下。
为了增加Actis的答案...
.attr('value')还会返回编辑输入字段之前的值。.val()返回当前值。
当使用文本输入字段时,.attr()和.val()的设置方法工作方式不同。
.val('newval')
将设置用户在页面上看到的值,并更新随后的.val()方法调用返回的值。它不会设置元素的value =属性。
OTOH
.attr('value','newval')
将在元素上设置value =属性。如果用户尚未键入并且尚未调用.val(newval),则这样做还将直观地更新控件并更新.val()返回的值。
您可以使用以下jsfiddle进行进一步调查:
https://jsfiddle.net/jasonnet/vamLww2k/
祝好运。