迭代具有相同名称和id的输入

时间:2013-08-15 15:13:32

标签: jquery

我在表格中输入了这些内容:

<tr><td><input type="hidden" id="layer_pk" name="layer_pk"  value="1" /></td></tr>
<tr><td><input type="hidden" id="layer_pk" name="layer_pk"  value="2" /></td></tr>

我希望在向上/向下移动表行的按钮时将这些输入值放入列表中

我不明白为什么这段代码只放置选定的行输入值,而不是所有行:

$(document).ready(function(){
      $(".up,.down").click(function(){
          var row = $(this).parents("tr:first");
          if ($(this).is(".up")) {
              row.insertBefore(row.prev());
          } else {
              row.insertAfter(row.next());
          }
          var checks = new Array();
          $("#layer_pk").each(function(idx, elem) {
              checks.push($(elem).val());
          });
          alert(checks);
      });
  });

2 个答案:

答案 0 :(得分:4)

不要重复使用您的id:只有一个元素可以拥有给定的ID。

在这里,您甚至不应该使用相同的名称,而是使用类。

然后改变

$("#layer_pk").each(function(idx, elem) {
          checks.push($(elem).val());
});

$(".layer_pk").each(function(idx, elem) {
          checks.push($(elem).val());
});

或者,以更简单的方式:

$(".layer_pk").each(function() {
          checks.push(this.value);
});

var checks = $('.layer_pk').map(function() { return this.value; }).get();

答案 1 :(得分:1)

重申:$("#layer_pk").length等于1,无论你在页面上有多少元素具有相同的id。如果使用id选择器,jQuery只会看到具有该id的第一个元素。所以保持你的身份独特。