【问题标题】:jQuery get values of checked checkboxes into arrayjQuery将选中复选框的值获取到数组中
【发布时间】:2019-03-05 18:45:30
【问题描述】:

我正在尝试获取当前选中的所有复选框的值并将它们存储到一个数组中。到目前为止,这是我的代码:

 $("#merge_button").click(function(event){
    event.preventDefault();
    var searchIDs = $("#find-table input:checkbox:checked").map(function(){
      return $(this).val();
    });
    console.log(searchIDs);
  });

但是,这比我需要的输出更多。我不仅得到了值,还得到了一些我不想要的东西。

["51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002", prevObject: jQuery.fn.jQuery.init[3], 上下文:文档,jquery:“1.9.1”,构造函数:函数,初始化: 功能...]

我只想要 ID(本例中为前 3 项)。

通过使用$.each 并将值推送到数组中,我得到了所需的输出:

$("#find-table input:checkbox:checked").each(function(){ myArray.push($(this).val()); })

["51729b62c9f2673e4c000004", "517299e7c9f26782a7000003", "51729975c9f267f3b5000002"]

不过我想使用$.map,因为它节省了我一行代码并且更漂亮。

谢谢

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您需要将.toArray() 添加到.map() 函数的末尾

    $("#merge_button").click(function(event){
        event.preventDefault();
        var searchIDs = $("#find-table input:checkbox:checked").map(function(){
            return $(this).val();
        }).toArray();
        console.log(searchIDs);
    });
    

    演示:http://jsfiddle.net/sZQtL/

    【讨论】:

      【解决方案2】:

      在最后调用 .get() 将生成的 jQuery 对象转换为真正的数组。

      $("#merge_button").click(function(event){
          event.preventDefault();
          var searchIDs = $("#find-table input:checkbox:checked").map(function(){
            return $(this).val();
          }).get(); // <----
          console.log(searchIDs);
      });
      

      the documentation:

      由于返回值是一个 jQuery 对象,其中包含一个数组,在结果上调用 .get() 来处理基本数组是很常见的。

      【讨论】:

      • 我期待来自$.map 的真正数组。感谢您的解决方案,它有效。
      • 非常感谢,我需要这个给 ma Ticketcenter
      • 我不明白的是为什么需要.get(),当函数从jQuery集合中的每个项目返回.val()时。这是因为map 在将其传递给searchIDs 之前将其转换回jQuery 对象吗?
      • 我们可以获取数组类型的值吗?
      【解决方案3】:

      我稍微重构了您的代码,并相信我提供了您正在寻找的解决方案。基本上,我没有将searchIDs 设置为.map() 的结果,而是将这些值推入一个数组中。

      $("#merge_button").click(function(event){
        event.preventDefault();
      
        var searchIDs = [];
      
        $("#find-table input:checkbox:checked").map(function(){
          searchIDs.push($(this).val());
        });
      
        console.log(searchIDs);
      });
      

      我创建了一个fiddle,代码正在运行。

      【讨论】:

        【解决方案4】:

        演示:http://jsfiddle.net/PBhHK/

        $(document).ready(function(){
        
            var searchIDs = $('input:checked').map(function(){
        
              return $(this).val();
        
            });
            console.log(searchIDs.get());
        
        });
        

        只需调用 get() 即可获得规范中所写的数组:http://api.jquery.com/map/

        $(':checkbox').map(function() {
              return this.id;
            }).get().join();
        

        【讨论】:

          【解决方案5】:

          不要使用“每个”。它用于同一元素的操作和更改。使用“map”从元素主体中提取数据并在其他地方使用。

          【讨论】:

          • jQuery 文档为大多数内容提供了很好的示例,包括 map
          【解决方案6】:

          需要将 HTML 中命名为数组的表单元素作为 javascript 对象中的数组,就像实际提交了表单一样。

          如果有一个表单有多个复选框如:

          <input name='breath[0]' type='checkbox' value='presence0'/>
          <input name='breath[1]' type='checkbox' value='presence1'/>
          <input name='breath[2]' type='checkbox' value='presence2'/>
          <input name='serenity'  type='text' value='Is within the breath.'/>
          ...
          

          结果是一个对象:

          data = {
             'breath':['presence0','presence1','presence2'],
             'serenity':'Is within the breath.'
          }
          
          
          var $form = $(this),
              data  = {};
          
          $form.find("input").map(function()
          {
              var $el  = $(this),
                  name = $el.attr("name");
          
              if (/radio|checkbox/i.test($el.attr('type')) && !$el.prop('checked'))return;
          
              if(name.indexOf('[') > -1)
              {
                  var name_ar = name.split(']').join('').split('['),
                      name    = name_ar[0],
                      index   = name_ar[1];
          
                  data[name]  = data[name] || [];
                  data[name][index] = $el.val();
              }
              else data[name] = $el.val();
          });
          

          这里有很多答案有助于改进我的代码,但它们要么太复杂,要么不完全符合我的要求:Convert form data to JavaScript object with jQuery

          有效但可以改进:仅适用于一维数组,结果索引可能不是连续的。数组的长度属性返回下一个索引号作为数组的长度,而不是实际长度。

          希望这会有所帮助。合十!

          【讨论】:

            【解决方案7】:
                 var ids = [];
            
            $('input[id="find-table"]:checked').each(function() {
               ids.push(this.value); 
            });
            

            这个对我有用!

            【讨论】:

              【解决方案8】:
              var idsArr = [];
              
              $('#tableID').find('input[type=checkbox]:checked').each(function() {
                  idsArr .push(this.value);
              });
              
              console.log(idsArr);
              

              【讨论】:

                【解决方案9】:

                这里允许是页面上的复选框类,var 允许将它们收集在一个数组中,您可以在 for 循环中检查检查是否为真,然后单独执行所需的操作。在这里,我设置了自定义有效性。我认为它会解决你的问题。

                  $(".allows").click(function(){
                   var allows = document.getElementsByClassName('allows');
                   var chkd   = 0;  
                   for(var i=0;i<allows.length;i++)
                   {
                       if(allows[i].checked===true)
                       {
                           chkd = 1;
                       }else
                       {
                
                       }
                   }
                
                   if(chkd===0)
                   {
                       $(".allows").prop("required",true);
                       for(var i=0;i<allows.length;i++)
                        {
                        allows[i].setCustomValidity("Please select atleast one option");
                        }
                
                   }else
                   {
                       $(".allows").prop("required",false);
                       for(var i=0;i<allows.length;i++)
                        {
                        allows[i].setCustomValidity("");
                        }
                   }
                
                }); 
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-02-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多