【问题标题】:how to get value of only checked checkboxes on clicking either li or checkbox itself wrapped with ul li using map()如何在单击 li 或使用 map() 用 ul li 包裹的复选框时仅获取选中复选框的值
【发布时间】:2013-06-03 23:43:50
【问题描述】:

我正在尝试使用 jQuery map 函数获取选中复选框的值,它工作正常。问题是:当我用ul li 包装inputs(类型复选框)时,我无法获得选中复选框的值。我还希望用户单击复选框本身或li 标签来检查复选框。到目前为止我的尝试:

<form name="myform" action="" method="get">
    <ul class="chk">
        <li><input type="checkbox" name="chk[]" value="India" />India</li>
        <li><input type="checkbox" name="chk[]" value="Pakistan" />Pakistan</li>
        <li><input type="checkbox" name="chk[]" value="UK" />UK</li>
        <li><input type="checkbox" name="chk[]" value="USA" />USA</li>
        <li><input type="checkbox" name="chk[]" value="Russia" />Russia</li>
    </ul>
</form>

 

$(document).ready(function(){
    $('.chk li').click(function(){
        var c = $(this).children();

        var check = $(c).map(function(){ 
            check.attr('checked','checked');
            return this.value;
        });
        console.log($(check));
    });
});

【问题讨论】:

    标签: jquery checkbox


    【解决方案1】:

    这是使用map()的东西:

    $('.chk li').click(function (e) {
        var innerCheckbox = $(this).find(':checkbox');
        if (e.target != innerCheckbox[0]) {
            innerCheckbox.prop('checked', !innerCheckbox.prop('checked'));
        }
        var check = $(this).parent().find(':checkbox:checked').map(function () {
            return this.value; // or return this;
        }).get(); // <---------- calling get() to get a basic array
    
        console.log(check); // array with the values of the checked ones
    });
    

    如果事件的目标li,它将选中复选框。之后,它会将选中的复选框列表和map() 的值选择到check 数组中。

    See demo here.

    【讨论】:

    • 但是,您提供的解决方案对我有用,我真的很感激,但是使用 map() 有类似的东西吗?无论如何谢谢..:)
    • 好了,我更新了代码以使用map()。演示也更新了。
    • 所以我错过了这段代码: if (e.target != innerCheckbox[0]) { innerCheckbox.prop('checked', !innerCheckbox.prop('checked')); } var check = $(this).parent().find(':checkbox:checked') 谢谢!这真是太棒了。再次感谢...:)
    【解决方案2】:

    要启用点击标签使用:

    <li><input type="checkbox" name="chk[]" id="ch1" value="India" />
       <label for="ch1">India</label>
    </li>
    

    其余的已经回答了。

    【讨论】:

      【解决方案3】:

      试试

      $(document).ready(function(){
          $('.chk li').click(function(){
              var c = $(this).children(':checkbox');
      
              var check = $(c).map(function(){ 
                  return this.checked ? this.value : undefined;
              });
              console.log(check);
          });
      });
      

      【讨论】:

      • 对不起,但这对我不起作用,但是,在将我的问题发布到 SO 之前,我已经尝试过了:(- 你试过了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多