按值检查多个HTML复选框 - 位twiddling

时间:2012-05-07 15:53:11

标签: jquery html checkbox bit-manipulation

我有几个具有相同名称的复选框,以及功率为2的值:

<input type=checkbox name=mycheckbox value=1>Some text 1
<input type=checkbox name=mycheckbox value=2>Some text 2
<input type=checkbox name=mycheckbox value=4>Some text 3
<input type=checkbox name=mycheckbox value=8>Some text 4
<input type=checkbox name=mycheckbox value=16>Some text 5
<input type=checkbox name=mycheckbox value=32>Some text 6

存储在数据库中的值是所选复选框的按位 OR ,因此如果选中某些文本3和某些文本6,则数据库中的值将为32 | 4 = 36

我使用Ajax调用从数据库加载此值。使用jQuery根据数字检查相应的复选框最简单或最好的方法是什么?

我更习惯于编写脚本并接近它:

for (i = 1; i <= 32; i*=2)
   if ((ajaxValue & i) == i)

但理想情况下,jQuery可以更轻松地完成它,并按值检查复选框。

2 个答案:

答案 0 :(得分:2)

YOUR_VALUE来自数据库。

$('input[name=mycheckbox][value="'+ YOUR_VALUE +'"]').prop('checked', true);

根据您的更新问题

试试这个:

var x = [];

$('input[name=mycheckbox]').each(function() {
    x.push(this.value);
});
var len = x.length,
    target = 36; // this is the value you get from ajax (integer)

for (i = 0; i <= len - 1; i++) {
    for (j = len - 1; j > i; j--) {
        var value = x[j + i] | x[i];
        if ( value === target) {
            $('input[name=mycheckbox][value="' + x[i] + '"], 
               input[name=mycheckbox][value="' + x[j + i] + '"]')
           .prop('checked', true);
        }
    }
}

DEMO

答案 1 :(得分:0)

$(function () {
  $('input[name=mycheckbox]').each(function () {
    // Your code there like if ($(this).val() ....
    if ($(this).val() == someValue) $(this).attr('checked', 'checked'); // Example of make the checkbox checked
  });
});