【问题标题】:Select values of checkbox group with jQuery使用 jQuery 选择复选框组的值
【发布时间】:2009-01-06 14:35:07
【问题描述】:

我正在使用 Zend_Form 输出一组复选框:

<label style="white-space: nowrap;"><input type="checkbox" name="user_group[]" id="user_group-20" value="20">This Group</label>

对于普通的 HTTP Post,这些值作为数组传递,但是当我对如何使用 jQuery 获取所有值感到有些困惑时。我想我可以使用以下方法选择组:

$("input[@name='user_group[]']").val()

但这只是获取列表中第一个复选框的值,而不管它是否被选中。有什么想法吗?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可以使用选中的选择器来仅抓取选定的选择器(无需知道计数或自己遍历它们):

    $("input[name='user_group[]']:checked")
    

    使用这些选中的项目,您可以创建这些值的集合或对集合执行某些操作:

    var values = new Array();
    $.each($("input[name='user_group[]']:checked"), function() {
      values.push($(this).val());
      // or you can do something to the actual checked checkboxes by working directly with  'this'
      // something like $(this).hide() (only something useful, probably) :P
    });
    

    【讨论】:

    • @$.each($("input[@name='user_group[]']:checked"), function() { 中不是必需的
    • @Ismail,它已针对 1.3 后的 jQuery 进行了更新。发布答案后发布了 1.3 版(2009 年 1 月 6 日发布,2009 年 1 月 14 日发布 1.3)。任何使用 v1.3 或更高版本的人都不应使用属性选择器。
    • 不能将[name='user_group[]'] 称为属性选择器。我还在 1.4.2 中使用它。现在有更好的选择吗?
    • 那是我的错字。任何使用 v1.3 或更新版本的人都不应使用属性选择器 [with "@"]。
    【解决方案2】:

    我不确定选择器中使用的“@”。至少对于最新的 jQuery,我必须删除 @ 才能使其与两个不同的复选框数组一起使用,否则会为每个数组选择所有选中的项目:

    var items = [];
    $("input[name='items[]']:checked").each(function(){items.push($(this).val());});
    
    var about = [];
    $("input[name='about[]']:checked").each(function(){about.push($(this).val());});
    

    现在两个,项目和工作。

    【讨论】:

    • 我相信@在 jQuery 1.3 +1 中被删除了
    • 如果您需要获取所有复选框的值,即使它们没有被选中,这也可以工作。例如,我需要创建一个包含所有复选框值(选中或未选中)的数组(哈希),只需删除 :checked 部分
    【解决方案3】:

    使用.map()(改编自http://api.jquery.com/map/的示例):

    var values = $("input[name='user_group[]']:checked").map(function(index,domElement) {
        return $(domElement).val();
    });
    

    【讨论】:

      【解决方案4】:

      使用map 代替each 可以避免数组创建步骤:

      var checkedCheckboxesValues = 
          $('input:checkbox[name="groupName"]:checked')
              .map(function() {
                  return $(this).val();
              }).get();
      

      来自文档的map() 页面:

      通过函数传递当前匹配集中的每个元素,生成一个包含返回值的新 jQuery 对象

      get() 将这些值转换为数组。

      【讨论】:

      • 如果可能的话会给你+100 ;)
      【解决方案5】:

      mhata dzenyu mese。其实

      var selectedGroups  = new Array();
      $(".user_group[checked]").each(function() {
          selectedGroups.push($(this).val());
      });
      

      【讨论】:

        【解决方案6】:

        我只是缩短了我选择的答案:

        var selectedGroups  = new Array();
        $("input[@name='user_group[]']:checked").each(function() {
            selectedGroups.push($(this).val());
        });
        

        它就像一个魅力,谢谢!

        【讨论】:

          【解决方案7】:

          我不是 100% 完全确定您希望如何“获取”这些值。但是,如果您想遍历复选框,您可以像这样使用 .each:

          ("input[@name='user_group[]']").each( function() {
              alert($(this).val());
          });
          

          当然还有更好的选择器:

          $(':checkbox')
          

          【讨论】:

            【解决方案8】:
            var values = $("input[name='user_group']:checked").map(function(){
                  return $(this).val();
                }).get();
            

            这将为您提供数组中选中框的所有值。

            【讨论】:

              【解决方案9】:

              您可以有一个 javascript 变量来存储发出的复选框的数量,即在页面的 &lt;head&gt; 中:

              <script type="text/javascript">
              var num_cboxes=<?php echo $number_of_checkboxes;?>;
              </script>
              

              因此,如果有 10 个复选框,从 user_group-1user_group-10,在 javascript 代码中,您将通过以下方式获得它们的值:

              var values=new Array();
              for (x=1; x<=num_cboxes; x++)
              {
                 values[x]=$("#user_group-" + x).val();
              }
              

              【讨论】:

                【解决方案10】:

                $(document).ready(function(){
                    		$('#btnskillgroup').click(function(){
                              getCheckedGroups('skills');
                            });
                  	$('#btncitiesgroup').click(function(){
                              getCheckedGroups('cities');
                            });
                         var getCheckedGroups = function(groupname){
                               var result = $('input[name="'+groupname+'"]:checked');
                              if (result.length > 0) {
                              	var resultstring = result.length +"checkboxes checked <br>";
                              	result.each(function(){
                              		resultstring += $(this).val()+" <br>"; //append value to exsiting var
                              	});
                    			$('#div'+groupname).html(resultstring);
                    		}else{
                    			$('#div'+groupname).html(" No checkbox  is Checked");
                    		}
                         
                         };
                    	});
                <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
                Skills:<input type="checkbox" name="skill"  value="Java"> Java
                    <input type="checkbox" name="skill" value="Jquery"> Jquery
                    <input type="checkbox" name="skill" value="PHP"> PHP
                <br>
                <input type="checkbox" name="cities"  value="Pune"> Pune
                    <input type="checkbox" name="cities" value="Baramati"> Baramati
                    <input type="checkbox" name="cities" value="London"> London
                
                    <input type="submit" id="btnskillgroup" value="Get Checked Skill group">
                <input type="submit" id="btncitiesgroup" value="Get cities checked group">
                    <div id="divskills"></div>
                <div id="divcities"></div>

                【讨论】:

                • 谢谢!你已经非常精确地实现了。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-11-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-01-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多