H5W3
当前位置:H5W3 > 问答 > 正文

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);
}
}
})

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

回答

肯定不能拿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);

未经允许不得转载:H5W3 » jq 修改input(checkbox)值

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址