我有一个非常简单的例子jsfiddle:
HTML:
<input type="text"/>
<input type="text" value="aaa"/>
JS:
$("input:first").val("aaa");
alert($("input[value='aaa']").length);
为什么 Chrome 和 IE 返回不同的结果?为什么 Chrome 中的 jQuery 在使用 jQuery 设置时无法识别“值”?
我该如何解决?我需要 Chrome 将返回与 IE 完全相同的结果。
编辑:我不接受我的回答,因为稍微考虑了一下,我还是不明白一些事情(也许我在几个部分上错了):
1)据我所知,浏览器在文本框中显示的文本应始终在“值”属性中,因为如果我提交表单,则文本框和其他输入字段中显示的“值”将提交给服务器(如果不是禁用)。
2)因此,如果文本框中显示的文本应该存储在“value”中以便提交,那么$("input[type='text']").val("aaa")
将文本“aaa”分配给“value”属性对我来说很自然,因为它可能会在以后提交。如果是这样,为什么$("input[value='aaa']")
不把它捡起来?
3)其他一些事情......当我不使用jQuery的“val”方法,而是直接将文本输入到文本框时,它不会转到“value”属性吗?我做了另一个例子,我不使用“val”将文本分配给文本框。我直接在文本框中输入它,然后$("input[value='aaa']")
不再拿起它。
这对我来说非常奇怪......我理解属性和属性之间的区别,但由于 HTML 表单的性质,我不明白为什么“val”不将值分配给属性,直接输入时,它不会给“价值”属性。
顺便说一句:在http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/我发现以下内容:
.attr() 和 .prop() 都不应该用于获取/设置值。改用 .val() 方法(尽管使用 .attr(“value”, “somevalue”) 将继续工作,就像它在 1.6 之前所做的那样)。
他们说“val”应该设置属性......或者我的英语不允许我理解它吗?
请解释我:)