需要JQuery来标记从数据库中的列表/数组中检查的复选框

时间:2012-04-19 11:30:12

标签: javascript jquery html forms

使用SQL 2008 Server和最新的JQuery。如果我从数据库中查询列并获取列表/数组,如何在每个复选框组中选中“已选中”复选框?示例复选框组和列表如下:

类别'1,7,20'的列表(Jquery应标记值为1,7,10的复选框) 喜欢'2,3'的列表(Jquery应该选中值为2和3的复选框)

<form>
    <input type="checkbox" class="category" name="category" value="14" />Blah
    <input type="checkbox" class="category" name="category" value="1" />Blah1
    <input type="checkbox" class="category" name="category" value="7" />Blah2
    <input type="checkbox" class="category" name="category" value="20" />Blah3
    <input type="checkbox" class="likes" name="likes" value="17" />Apple
    <input type="checkbox" class="likes" name="likes" value="3" />Apple1
    <input type="checkbox" class="likes" name="likes" value="2" />Apple2
    <input type="checkbox" class="likes" name="likes" value="13" />Apple3
</form>

我尝试了以下JQuery代码,但它不起作用:

$.each(['1,7,20'], function (index, item) {
    if ($('.category').val() === item) {
        $(".category").prop("checked", true);
    }
});

2 个答案:

答案 0 :(得分:2)

您传递的数组包含字符串1,7,20的单个元素,而不是包含三个元素1720的数组所以我不确定你为什么期望它能起作用。如果您的输入实际上是字符串,则可以将其拆分为逗号以获取一个数字为数组的数组:

var myString = '1,7,20';
var myArray = myString.split(',');

然后将myArray传递给$.each()函数调用。

您传递给$.each()的函数中的代码也存在问题。如果你在包含多个元素的jQuery对象上调用.val(),它通常只返回第一个元素的值。您需要再次迭代元素集合,并使用this来引用当前元素。

$.each(myArray, function(index, item){
    $('.category').each(function(){
        if(this.value === item) {
            this.checked = true;
        }
    });
});

答案 1 :(得分:0)

顺便说一句,从语义上讲,你应该使用filter。您可以做同样的事情,同时提高代码的可读性。