【发布时间】:2012-10-02 16:39:26
【问题描述】:
我有一个很简单的例子jsfiddle:
HTML:
<input type="text"/>
<input type="text" value="aaa"/>
JS:
$("input:first").val("aaa");
alert($("input[value='aaa']").length);
为什么 Chrome 和 IE 会返回不同的结果?为什么使用 jQuery 设置时,Chrome 中的 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”应该设置属性...或者我的英语让我看不懂对吗?
请解释一下:)
【问题讨论】:
-
嗯,值得看看属性和属性的区别(blog.jquery.com/2011/05/12/jquery-1-6-1-released),选择器可能只搜索属性(在chrome中),而jQuery选择器引擎(Sizzle)可能会接受价值也是...
-
@DerWaldschrat 将此作为答案。了解属性和属性之间的区别很重要。
-
好的,当我完成 jsFiddle 后,我将为所有这些创建一个完整的答案,但仅使用 .val() 访问该值绝对是正确的。
-
@DerWaldschrat 谢谢,会等待它:)
标签: javascript jquery jquery-selectors