如何修改我的代码以选择特定的复选框?

时间:2015-08-22 14:35:55

标签: javascript jquery checkbox

我想编写一个简单的javascript脚本,从网站上的大量复选框项目中进行选择。假设我想选择第3个,第12个和第25个复选框。我该怎么办?现在它选择每个项目。

var script = document.createElement('script');
 script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
 script.type = 'text/javascript';
 document.getElementsByTagName('head')[0].appendChild(script);
$("#detail input:checkbox").click();

3 个答案:

答案 0 :(得分:1)

我会使用filter()prop()

var indexesToCheck = [2,11,24];

$("#detail input:checkbox").filter(function(index){
   return $.inArray( index, indexesToCheck ) > -1;
   /* OR something like*/
   return $(this).hasClass('someClass');
}).prop('checked',true);

由于不清楚你打算如何确定哪些被检查,我使用了一个简单的数组。您可以使用this检查过滤器中的类或任何其他元素属性,这将是每个元素的实例

参考文献:

filter() docs

prop() docs

答案 1 :(得分:0)

<input type="checkbox" name="multi_selection"/>
var idArr = [];
$.each($("input[name='multi_selection']:checked"), function(){            
  idArr.push($(this).val());
});

现在idArr是所选复选框的数组...... alert(idArr)

答案 2 :(得分:0)

我将在javascript和等效的jQuery中提供解决方案。我添加了最后一个解决方案(我最喜欢的),它将是通用的,创建一个自定义伪选择器。

对于javascript,我选择了所有输入并验证其类型。当类型为复选框时递增计数器。然后我与我想要选择的索引数组进行比较,然后将元素推送到包含所有元素的最终数组(mySelection):

var mySelection = [];
var checkboxIndexes = [3,12,25];
var checkCounter = 0;
var allInputs = document.getElementsByTagName("input");

for(var i=0;i<allInputs.length;i++) {
    if (allInputs[i].type == 'checkbox') {
        if(checkboxIndexes.indexOf(checkCounter) > -1;)
            mySelection.push(allInputs[i]);
        checkCounter++;
    }
}; 

对于你可以使用的jQuery:

$('#detail input:checkbox:eq(index)');

但是我做了一个使用过滤器的javascript。我个人更喜欢这个解决方案,因为你可以在一个数组中选择所有索引:

var checkboxIndexes = [3, 12, 25];
var mySelection = $("#detail input:checkbox").filter(function(index) {
    return checkboxIndexes.indexOf(index) > -1;
});

最后一个解决方案是一个通用的解决方案,它允许创建一个我称为&#34; multieq&#34;的自定义伪选择器。目标是使用&#34; multieq&#34;以这种方式直接从选择器过滤:

var mySelection = $("input:checkbox:multieq(3, 12, 25)");

这是我用来创建伪选择器的代码:

$.expr[':'].multieq = $.expr.createPseudo ?
    $.expr.createPseudo(function(match) {
        var checkboxIndexes=match.split(',');
        for(var i=0; i<checkboxIndexes.length;i++) checkboxIndexes[i] = parseInt(checkboxIndexes[i], 10);
        var index=-1;   
        return function( elem, doc, isXML ) {
            index++;
            return checkboxIndexes.indexOf(index) > -1;
        };
    }) :
    function( elem, index, match ) {
        var checkboxIndexes=match[3].split(',');
        for(var i=0; i<checkboxIndexes.length;i++) checkboxIndexes[i] = parseInt(checkboxIndexes[i], 10);
        return checkboxIndexes.indexOf(index) > -1;
    };
//Now we can use this:
var mySelection = $("input:checkbox:multieq(3, 12, 25)");

由于1.8+ $ .expr在某些情况下中断并且不包括param索引,因此建议使用createPseudo(),这就是为什么在1.8下的jQuery版本有一个回退函数。 createPseudo,既不包括索引,也允许我们创建索引(作为计数器)。

我希望它有所帮助!