2013-04-08 176 views
2

我一直在使用此代码来获取勾选的所有复选框的逗号分隔列表。按值检查复选框

$(".hidFeedsIds").val($.map($(':checkbox[name=channel\[\]]:checked'), function (n, i) { 
    return n.value; 
}).join(',')); 

现在我需要做相反的事情,我有列表,但需要检查所有值的复选框。

有谁能告诉我这怎么办?

的事实,你的代码是不是语法上有效

回答

7

除了...

$('input:checkbox').filter(function() { 
    return valuesArray.indexOf(this.value) > -1 
}).prop('checked', true); 
+0

谢谢我会试试这个,你能解释我的代码有什么问题吗?它为我工作。 – 2013-04-08 20:37:47

+0

你忘了'function(){'。另外,不知道为什么'.join()'将数组放入字符串中。 – 2013-04-08 20:43:21

+0

哈哈我发布了错误的代码,只是在剪贴板上没有注意到,我试过这个,它的工作正常,谢谢。 – 2013-04-08 20:47:52

4

的另一种方式,以补充@马特的答案。

$.each(valuesArray, function (i, v) { 

    // or use .prop() if you like, depending on jQuery version 
    $("input:checkbox[value='" + v + "']").attr("checked", true); 
}); 
+1

不应该使用'.prop()'而不是attr? – tymeJV 2013-04-08 20:34:50

+2

取决于 - 我喜欢提及这两个人,因为一些穷人(如我)在生产中仍然使用较老的jQueries。 – karim79 2013-04-08 20:36:04

1

LIVE DEMO

如果你的元素值共享相同的ID,如:

<input type="checkbox" id="a" value="a" /> 
<input type="checkbox" id="b" value="b" /> 

比你可以这样做:

$('#'+ valuesArray.join(', #')).prop('checked', true); 

而你在原始脚本中遗漏了function。应该是:

var valuesArray = $('input:checkbox:checked').map(function(){ 
    return $(this).val(); 
}).get().join(); 
+0

他们没有相同的ID,但感谢分享。 – 2013-04-08 20:48:46

+0

@LuisTellez不客气! – 2013-04-08 20:49:20