jquery在点击时添加到数组?

时间:2010-03-30 17:54:07

标签: jquery arrays checkbox

我对每个()和.each()感到困惑......我想我需要同时使用它们,但我不确定如何......

基本上,我有一系列复选框,当它们被选中时,我想得到最近的表行的id并将其添加到一个数组,然后我可以序列化并传递给一个函数。

所以,html看起来像这样:

<tr id="t1"><td><input type="checkbox" name="did[]" value="232" class="bd" /></td></tr>
<tr id="t2"><td><input type="checkbox" name="did[]" value="234" class="bd" /></td></tr>
<tr id="t3"><td><input type="checkbox" name="did[]" value="676" class="bd" /></td></tr>
<tr><td><button id="tsid" name="tsid" type="button">Send</button></td></tr>

而且,当选中此复选框时(如果选择),我想获得最接近的tr id并将其存储在数组中:

var trids = []

然后序列化输入数据和trids数组......

到目前为止,我只有这个:

$('#tsid').click(function() {

  //meant to get the values of the selected checkboxes
  var myData = $('input[name=did[]]').serialize();

  //meant to find and store the closest tr ids in an array... 
  $('.bd').each(function() {
    var trids = $(this).closest("tr").get(0);  //and now I'm lost... 
  });

}

3 个答案:

答案 0 :(得分:1)

应该是:

$('.bd:checked').each(function() {
   trids.push($(this).closest("tr").attr('id')); // instead of var trids = ....
});

$('.bd:checked')仅选中已选中的复选框。 closest('tr')获取父tr,因为您已经正确地完成了操作。 attr('id')获取此id的{​​{1}}。 tr中没有必要get(0)已经只选择了一个元素 然后使用数组上的closest()方法将此值添加到数组trids

<强>更新
jQuery的push()函数从表单元素的值中生成一个字符串,例如:

.searialize()

我不认为它适用于数组。我知道的唯一解决方案是自己生成数组的字符串:

field1=value1&field2=value2&...

这会将数组值附加到序列化字符串 但我想有更好的解决方案。

答案 1 :(得分:0)

只需获取元素,然后使用map函数从每个tr元素中获取id。使用get方法将结果作为数组而不是jQuery对象获取。

var trids = $('.bd').map(function(i,e){ return $(e).closest('tr').attr('id'); }).get();

答案 2 :(得分:0)

这段代码对我有用

$(document).ready(function () {
      var checkbox_values= [];
      $('input[type="checkbox"]').change(function() {
        if(this.checked) {
            $(this).each(function(){
                var checked_value = $(this).val();
                checkbox_values.push(checked_value);
            });
            console.log( "checked_value: " + checkbox_values);
           //output checked_value: 232
           //output checked_value: 232,234
           //output checked_value: 232,234,676
        } else {
            console.log('not checked');
        }    
      });
    });