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

jQuery ID selector works only for the first element

本文关键字:第一个 元素 适用于 ID 选择器 jQuery      更新时间:2023-09-26

我有 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>

这是我当前的jQuery脚本:

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

但它仅适用于第一个按钮,单击其他按钮将被忽略。

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

您有无效的 HTML。网页中不能有多个元素具有相同的id属性值。

引用规范:

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

id = 名称 [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>

jQuery代码

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

但它仅适用于第一个按钮

jQuery #id选择器文档:

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

如果你看一下 jQuery 源代码,你可以看到当你用 id selecor-( $("#id") 调用$时,jQuery 调用原生 javascript document.getElementById函数:

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

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

演示

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

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

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

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

尽管将 id

更改为类更好,但您可以使用属性 equals 选择器获取具有相同 id 的所有元素:

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

或者这只获取 id 为 xyz 的按钮:

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

或者 id 为 xyz 的div:

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

等。

或者,您可以使用"属性包含选择器"来获取ID包含"xyz"的所有元素:

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

当然,这意味着所有 id 部分包含 "xyz" 的元素都将被选中。

如果您有多个具有相同 id 的元素,这也有效。

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

你可以在这里查看

如果你在容器中有相同的 id,你可以使用 on() 访问每个事件的每个元素

$("#containers").on("click","#xyz",function(){
  alert($(this).val())
  })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="containers">
<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>
</div>

关于 on() 的信息在这里

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

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