循环选中的复选框jQuery

时间:2014-05-19 20:14:14

标签: javascript jquery checkbox each

我正在尝试使用以下代码获取所有选中复选框的值,以将它们插入到textarea中。

 $('input[name="user"]:checked').each(function(){
     parent.setSelectedGroup($(this).val()+ "\n");
  });

但我总是只得到一个值。

如何以正确的方式编写代码以获取所有选中复选框的值?

提前致谢!

修改

1)“parent”,因为复选框位于fancybox.iframe中。

2)父窗口中的setSelectedGroup为

function setSelectedGroup(groupText){
$('#users').val(groupText);

1 个答案:

答案 0 :(得分:3)

获取所有值,只需在每个循环中通过您将新值传递给setSelectedGroup的集合。我认为这种方法取代了内容而不是追加,所以你根本没有看到它发生,因为它太快了。

parent.setSelectedGroup(
  //select elements as a jquery matching set
  $('[name="user"]:checked')                
    //get the value of each one and return as an array wrapped in jquery
    //the signature of `.map` is callback( (index in the matching set), item)        
    .map(function(idx, el){ return $(el).val() })
    //We're done with jquery, we just want a simple array so remove the jquery wrapper
    .toArray()
    //so that we can join all the elements in the array around a new line
    .join('\n')
);

应该这样做。

其他几点说明:

  • 没有理由指定输入选择器名称属性,通常名称属性仅用于输入/ select / textarea系列元素。
  • 我也会避免在循环内写入DOM。除了更好的技术来修改状态的次数越少,性能往往越差,因为浏览器必须在每次循环中进行布局计算。
  • 强烈建议几乎总是为您关注的页面部分选择父元素。并将其传递为context parameter for jquery selectors。这将帮助您确定html更改的范围,而不会意外地修改页面其他部分的内容。