需要根据模型数据中的字符串将复选框设置为已选中

时间:2014-07-29 13:00:38

标签: javascript jquery asp.net-mvc-4 checkbox

我正在尝试根据存储在模型中的逗号分隔字符串设置checked属性。这个问题是被检查的属性不存在。有谁看到我做错了什么?这就是我所拥有的:

从控制器返回的数据......

V1P01,V1P02,V1P03

查看代码。

$(document).ready(function () {
    var array = "@Model.IncidentVehicle.VA_Sub1VehicleDamage".split(',');
    for (var i in array)
        $("[name=myCheckboxName][value=" + $.trim(array[i]) + "]").attr('checked', true);
    });
<div class="carCBsPassenger">
    <input name="V1P01" id="V1P01" type="checkbox" value="V1P01" style="border: none;" />
    <input name="V1P02" id="V1P02" type="checkbox" value="V1P02" style="border: none;" />
    <input name="V1P03" id="V1P03" type="checkbox" value="V1P03" style="border: none;" />
    <input name="V1P04" id="V1P04" type="checkbox" value="V1P04" style="border: none;" />
    <input name="V1P05" id="V1P05" type="checkbox" value="V1P05" style="border: none;" />
    <input name="V1P06" id="V1P06" type="checkbox" value="V1P06" style="border: none;" />
    <input name="V1P07" id="V1P07" type="checkbox" value="V1P07" style="border: none;" />
    <input name="V1P08" id="V1P08" type="checkbox" value="V1P08" style="border: none;" />
    <input name="V1P09" id="V1P09" type="checkbox" value="V1P09" style="border: none;" />
    <input name="V1P10" id="V1P10" type="checkbox" value="V1P10" style="border: none;" />
    <input name="V1P11" id="V1P11" type="checkbox" value="V1P11" style="border: none;" />
    <input name="V1P12" id="V1P12" type="checkbox" value="V1P12" style="border: none;" />
    <input name="V1P13" id="V1P13" type="checkbox" value="V1P13" style="border: none;" />
    <input name="V1P14" id="V1P14" type="checkbox" value="V1P14" style="border: none;" />
</div>

3 个答案:

答案 0 :(得分:0)

没有一个复选框的name属性为myCheckboxName。此外,您缺少一些开括号,并在末尾有一个结束括号导致语法错误。试试这个:

var array = "V1P01,V1P02,V1P03".split(',');
for (var i = 0; i < array.length; i++) {
    $("#" + $.trim(array[i])).attr('checked', true);
};

Example fiddle


此外,假设服务器列表的格式没有改变,您可以通过替换字符串来删除循环,以便按id选择元素:

var selector = '#' + array.replace(/\,/g, ',#');
$(selector).attr('checked', true);

Example fiddle

答案 1 :(得分:0)

您应该使用.prop()方法。我还为jQuery .each()切换了for循环。

DEMO

var array = ['V1P01', 'V1P02', 'V1P03'];
$.each(array, function(key, val){
    $('input[value="' + $.trim(array[key]) + '"]').prop('checked', true);
});

希望这有帮助!

答案 2 :(得分:0)

您应该更改选择器并使用prop()方法。并且可能在值中使用单引号。

$(".carCBsPassenger input[value='" + $.trim(array[i]) + "']").prop('checked', true);