jq 修改input(checkbox)值

比如
var flmArr=[1,3,4,6];

有好多个checkbox ,如果checkbox的value值是flmArr其中一个值 那么这个checkbox设置为选中状态,否则设置未选中。

<label>
    <input type="checkbox" name="checkGy" value="1" />分类1
</label>
<label>
    <input type="checkbox" name="checkGy" value="2" />分类2
</label>
<label>
    <input type="checkbox" name="checkGy" value="3" />分类3
</label>
<label>
    <input type="checkbox" name="checkGy" value="4" />分类
</label>


var flmArr=new Array();
var flm=data[0].flm;
flmArr=flm.split(',');

$("input[name='checkGy']").each(function(){
    for(var i=0;i<flmArr.length;i++)
    {
        if($(this).val() == flmArr[i]){
            $(this).attr('checked', 'checked');
        }else {
            $(this).attr('checked', false);
        }
    }
 })

image.png
这是flmArr 从数据库拿过来的值 想与所有的input的value值对比 如果有相同值的 选中 没有的设置未选中 上面我写的代码有问题 该怎么实现

阅读 5k
3 个回答

肯定不能拿flmArr[i] 跟 $(this).val() 进行比较啊~
代码:

 if(flmArr.includes(Number( $(this).val() )){
    $(this).attr('checked', 'checked');
}else {
    $(this).attr('checked', false);
}

https://codepen.io/jamesfancy...

用来比较的值是一个集合,检查的时候需要遍历一个个对比看它是不在在里面,

  • Set 或者 Array.prototype.includes 可以快速判断
  • Array.prototype.find 可以按一定规则查找

你那段代码遍历逻辑是对的,只是不应该在循环里置 false

    $("input[name='checkGy']").each(function () {
        // 先初始为 false
        $(this).attr("checked", false);
        for (var i = 0; i < flmArr.length; i++) {
            // 如果找到了置为 true
            if ($(this).val() == flmArr[i]) {
                $(this).attr("checked", "checked");
            }
            
            // 如果没找到置为 false 的话,
            // 实际是根据 flmArr 的最后一个值来判断要不要勾选
            // 因为前面干的任何事情都被最后一次覆盖了
        }
    });

不要用attr改,用prop

$(this).prop('checked', true);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题