jQuery的idselect器只适用于第一个元素

我有3个相同的IDbutton,我需要得到每个button值,当他被点击。

<button id="xyz" type="button" class="btn btn-primary" value="1">XYZ1</button> <button id="xyz" type="button" class="btn btn-primary" value="2">XYZ2</button> <button id="xyz" type="button" class="btn btn-primary" value="3">XYZ3</button> 

这是我目前的jQuery脚本:

 $("#xyz").click(function(){ var xyz = $(this).val(); alert(xyz); }); 

但它只适用于第一个button,点击其他button被忽略。

我有3个相同的IDbutton…

你有无效的HTML,你不能有一个相同的id页面中的元素。

引用规范 :

7.5.2 元素标识符:id和class属性

id = name [CS]
该属性为元素分配一个名称。 该名称在文档中必须是唯一的。

解决scheme :从id更改为class

 <button type="button" class="btn btn-primary xyz" value="1">XYZ1</button> <button type="button" class="btn btn-primary xyz" value="2">XYZ2</button> <button type="button" class="btn btn-primary xyz" value="3">XYZ3</button> 

jQuery代码

 $(".xyz").click(function(){ alert(this.value); // No need for jQuery :$(this).val() to get the value of the input. }); 

但它只适用于第一个button

jQuery #idselect器文档 :

每个id值只能在文档中使用一次。 如果多个元素被分配了相同的ID,则使用该ID的查询将仅selectDOM中的第一个匹配元素。 不过,这种行为不应该依赖。 具有多个使用相同ID的元素的文档是无效的。

如果您查看jQuery源代码,当您使用id selecor-( $("#id") )调用$时,jQuery将调用本地javascript document.getElementById函数:

 // HANDLE: $("#id") } else { elem = document.getElementById( match[2] ); } 

虽然在document.getElementById的规范中 ,他们没有提到它必须返回第一个值,这是浏览器实现它的大部分(也许是所有?)的方式。

DEMO

ID的意思是“标识符”,每个文件只有一次有效。 由于您的HTML在这一点上是错误的,所以一些浏览器select第一个,最后一个发现这个ID的元素。

更改名称的ID将是一个好的一步。

然后使用$('button[name="xyz"]').click(function(){

根据我的经验,如果你使用$('button#xyz')select器,它会起作用。 这是一个黑客,但它仍然是无效的HTML。

您不能拥有相同的ID,因为ID在页面HTML中是唯一的。 将其更改为类或其他属性名称。

 $('attributename').click(function(){ alert($(this).attr(attributename))}); 

尽pipe将id更改为一个类更好,但可以使用属性equalsselect器来获取具有相同id的所有元素:

 $('[id="xyz"]') 

或者这只获得id为xyz的button:

 $('button[id="xyz"]') 

或ID为xyz的div:

 $('div[id="xyz"]') 

等等

或者,您可以使用“Attribute Contains Selector”来获取所有包含“xyz”的ID的元素:

 $('[id*="xyz"]') 

当然,这意味着所有id为“xyz”的元素都将被选中。

这也工作,如果你有多个元素相同的ID。

  $("button#xyz").click(function(){ var xyz = $(this).val(); alert(xyz); }); 

你可以在这里检查