【问题标题】:get value of checked checkbox list in array in jQuery获取jQuery数组中选中复选框列表的值
【发布时间】:2012-03-02 12:13:12
【问题描述】:

我有一个复选框列表,页面加载时所有复选框都已预先选中。

首先,我想读取所有复选框(选中)的值并存储在全局数组中。

以后,每当用户单击任何复选框(未选中/选中)时,我想使用仅选中复选框的值来更新数组。

这一切我都想在 jQuery 中完成。

谢谢

【问题讨论】:

  • 我不知道你为什么要把它拉到一个数组中,你有一个控件数组......它已经有效了,不需要重复努力。
  • 您是否在任何答案或 cmets 中找到了解决方案?

标签: javascript jquery checkbox


【解决方案1】:
<input type="checkbox" value="somevalue1" class="chk">
<input type="checkbox" value="somevalue2" class="chk">
<input type="checkbox" value="somevalue3" class="chk">
<input type="checkbox" value="somevalue4" class="chk">
<input type="checkbox" value="somevalue5" class="chk">
<script>
var someGlobalArray = new Array;

$(".chk").click(function() {
    someGlobalArray=[];
    $('.chk:checked').each(function() {
        someGlobalArray.push($(this).val());
    });
    console.log(someGlobalArray);
});
</script>

【讨论】:

  • 这很好,当再次选中复选框时我如何更新。
  • 我有这个函数 function updateCategoryList() { //g_categoryList = []; $('.g_chkCat:checked').each(function() { g_categoryList.push($(this).val()); }); //$('#t').val(categoryList); alert("长度:"+g_categoryList.length +" 值:"+g_categoryList); } 我如何链接单击复选框以再次调用此函数
  • $(".g_chkCat").click(function() { g_categoryList = []; $('.g_chkCat:checked').each(function() { g_categoryList.push($(this ).val()); }); //$('#t').val(categoryList); alert("Length: "+g_categoryList.length +" Values: "+g_categoryList); }
【解决方案2】:

你的意思是这样的吗?

var arrCheckboxes;
var checkboxSelector = "input[type='checkbox']";
$("body").delegate(checkboxSelector , "click", function(){
    arrCheckboxes = $(checkboxSelector).map(function() {
        return this.checked;
    }).get();
});

(也许您应该将 $("body") 更改为更精确的容器)

如果您想要一个包含名称(...或 id 或者可能是元素)的对象的数组...您可以执行以下操作:

var arrCheckboxes;
var checkboxSelector = "input[type='checkbox']";
$("body").delegate(checkboxSelector , "change", function(){
    arrCheckboxes = $(checkboxSelector).map(function() {
        return { name: this.name, val: this.checked };
    }).get();
});

【讨论】:

  • 我有这些复选框 ul>li>input
  • $("ul").delegate(... 如果您的页面上有多个列表,请向 ul 和选择器添加一个类。当您单击复选框时,它将冒泡到容器中(在本例中为
      )。这样您可以绑定一个事件,而不是每个复选框一个。
【解决方案3】:

我假设您想要的是选中项目的 nameid,因为复选框 values 是布尔值?

var checked = {};
$(':input[type="checkbox"]').each(function() {
    var name= this.name;
    var val = this.checked;
    if (val) {
        checked[name] = val;
    }
}).on('change', function() {
    var name = this.name;
    var val = this.checked;
    if (val) {
        checked[name] = val;
    } else {
        delete checked[name];
    }
});

然后对象checked 将包含,只有那些对应于选中项的才会出现在该对象中。

http://jsfiddle.net/tFYPF/ 的工作演示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多