-1

我有一系列具有相同类别的复选框。我想将所有具有相同类的复选框作为一个集合并提取它们的 id 和检查状态。但是我看到的所有按类选择的示例都只是对该类的所有元素应用了一个更改。我需要使用该类获取所有复选框元素的集合/数组,以便可以迭代它们。

好的,我已经尝试了一些建议,但没有运气。这会在 IE8 中引发 Object Expected 错误:

var checkboxes = document.querySelectorAll("input[type='checkbox'].chkRoles");

无论检查什么,这每次都会给我一个空数组。

    var mandatoryRoleIDs = [];

    $('input.chkRoles[type="checkbox"]').each(function (i, checkbox)
    {
        if ($(checkbox).attr('checked'))
            mandatoryRoleIDs.push($(checkbox).attr('id'));
    });
4

2 回答 2

2
var checkboxes = document.getElementsByClassName('classname');

然后迭代它来做你需要的。

for(var i = 0; i < checkboxes.length; i++) {
    var current = checkboxes[i];
    // stuff on current
}

在这种简单的情况下,没有必要使用 jQuery querySelectorAll,旧版浏览器也不完全支持;Vanilla JS 是最好的方法!

由于您需要支持 IE8(该死的 Microsoft),您应该执行以下操作:

var inputs = document.getElementsByTagName('input'),
    className = "classname";
for (var i = 0; i < inputs.length; i++) {
    var current = inputs[i];
    if (current.type !== 'checkbox' || current.className.indexOf(className) === -1) continue;
    //do stuff with current
}

请参阅此片段的有效 JSFiddle 示例

于 2013-06-11T18:18:07.467 回答
2

由于您的问题是用 jQuery 标记的,因此您可以使用 jQuery 的 each() 函数来做到这一点:

$('input.someClass[type="checkbox"]').each(function(i,el){
    var $this = $(el),
        id = $this.attr('id'),
        checked = $this.attr('checked');
    /* do stuff with id and checked */
});
于 2013-06-11T18:19:52.757 回答