2

我是 jQuery 的新手。我在使用 [name=value] 选择器时遇到了问题。这是HTML:

<input type="number"/>

很简单,对吧?这是JS:

$("input").val(100);
$("input[value='100']").val(200)​

结果是:脚本的第一行有效,但第二行无效。(Chrome、FF、IE9)这两行都在 IE8 中有效。这是怎么发生的?顺便说一句,我正在使用 jQuery1.7.2。或者您可以在http://jsfiddle.net/wzKNV/上测试上述代码

4

2 回答 2

6

attribute-equals选择器检查属性,但.val()仅更改属性,因此选择器看不到更新。

jQuery/Sizzle 默认的本地querySelectorAll方法强制执行这种“仅属性”行为。

如果你破坏了 的选择器querySelectorAll,所以必须使用 Sizzle,它会起作用......

// v------made it a non-standard Sizzle selector
$(":input[value='100']").val(200);

这是因为 Sizzle 选择器不一定与qSA选择器兼容。当然,这会稍微改变选择器的含义,但对说明很有用。

演示:http: //jsfiddle.net/wzKNV/3/


要使用标准选择器(IMO 是个好主意)保持它,您可以filter()改用...

$("input").filter(function() { return this.value === '100'; })
          .val(200);

演示:http: //jsfiddle.net/wzKNV/4/

于 2012-04-16T03:12:34.060 回答
0

如果

<input type="nubmer" disabled="disabled" value="100" />​ // your fiddle have no `value`

然后

$("input[value='100']").val(200)​​​​​​​

将工作

于 2012-04-16T03:18:52.927 回答