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

以上是 jq 修改input(checkbox)值 的全部内容, 来源链接: utcz.com/a/66536.html

回到顶部