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);
}
}
})
这是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);
以上是 jq 修改input(checkbox)值 的全部内容, 来源链接: utcz.com/a/66536.html