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 #id
select器文档 :
每个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); });
你可以在这里检查