【问题标题】:jquery add to an array on click?jquery在点击时添加到数组中?
【发布时间】:2010-03-30 17:54:06
【问题描述】:

我对 each() 和 .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... 
  });

}

【问题讨论】:

    标签: jquery arrays checkbox


    【解决方案1】:

    应该是:

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

    $('.bd:checked') 只选择选中的复选框。 closest('tr') 得到父 tr,因为你已经正确地做到了。 attr('id') 获取此tridget(0) 中不需要,因为 closest() 已经选择了一个元素。
    然后使用数组上的push() 方法将此值添加到数组trids

    更新:
    jQuery 的.searialize() 函数根据表单元素的值生成一个字符串,例如:

    field1=value1&field2=value2&...
    

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

    var myData = $('input[name=did[]]').serialize();
    
    for(var i = 0; i < trids.length; i++) {
        myData += '&trid[]=' + trids[i]; or // '&trid%5B%5D=' have it encoded.
    }
    

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

    【讨论】:

    • 噢……谢谢。如何将 trids 数组和 myData 数组合二为一?我试过 var sData = $('input[name=dsid[]]').trids.serialize();但是,显然……那没有用……
    • @KittyYoung:这取决于您希望结果数组的样子。
    • 嗯...不完全确定我明白你在问什么。最后,我想将它们都序列化并将其发送到 php.ini。所以,我猜数据应该是这样的: dsid%5B%5D=5&dsid%5B%5D=6&trs%5B%5D=t1 你是这个意思吗?
    • @KittyYoung:不完全是,但我的评论是不必要的,因为您想要序列化数据并且serialize() 仅适用于表单元素。查看更新的答案是否对您有帮助。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这段代码对我有用

      $(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');
              }    
            });
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        • 2022-01-12
        • 1970-01-01
        相关资源
        最近更新 更多