jQuery id选择器仅适用于第一个元素

Maf*_*aik 18 html javascript jquery

我有3个具有相同ID的按钮,我需要在单击时获取每个按钮值.

<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>
Run Code Online (Sandbox Code Playgroud)

这是我目前的jQuery脚本:

$("#xyz").click(function(){
      var xyz = $(this).val();
      alert(xyz);
});
Run Code Online (Sandbox Code Playgroud)

但它只适用于第一个按钮,点击其他按钮被忽略.

gdo*_*ica 44

我有3个具有相同ID的按钮...

您的HTML无效,您在页面中不能有多个相同的元素id.

引用规范:

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

id = name [CS]
此属性为元素指定名称.该名称在文档中必须是唯一的.

解决方案: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>
Run Code Online (Sandbox Code Playgroud)

jQuery代码:

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

但它只适用于第一个按钮

jQuery #id选择器文档:

每个id值只能在文档中使用一次.如果为多个元素分配了相同的ID,则使用该ID的查询将仅选择DOM中的第一个匹配元素.但是,不应依赖此行为; 具有多个使用相同ID的元素的文档无效.

如果你查看jQuery源代码,你可以看到$用id selecor-($("#id"))调用时,jQuery调用本机javascript document.getElementById函数:

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

虽然,在他们未提及的规范document.getElementById它必须返回第一个值,但这是大多数(可能全部?)浏览器实现它的方式.

DEMO

  • 对我来说很好看:)也许你可以添加一个关于普通DOM方法的句子,这样我们就可以将它用作该案例的规范答案(可能需要稍微调整一下这个问题,但我是用手机写的).没有必要使它成为社区维基,你值得代表:) (2认同)

cam*_*o2k 6

ID表示"标识符",每个文档仅有效一次.由于此时您的HTML是错误的,因此某些浏览器选择第一个,一些是具有该ID的最后一个发生元素.

更改名称的ID将是一个很好的步骤.

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