You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:jQuery实现复选框转0/1数组及状态不更新问题

解决你的jQuery复选框数组问题

嘿,我来帮你搞定这两个小问题!

问题1:复选框状态变更后数组值始终为false

你代码里的$(this).is('checked')写法出错啦!is()方法里的参数应该是**:checked伪类选择器**,而不是字符串'checked'——后者是在判断当前元素是不是<checked>标签(显然不存在这种标签),所以一直返回false。

更简洁靠谱的写法是直接用DOM元素的原生checked属性:this.checked,它会直接返回布尔值,性能还更好。

问题2:数组存储true/false而非期望的0/1

只需要把布尔值转成数字就行,两种简单方式任选:

  • 三元表达式:this.checked ? 1 : 0(直观易懂)
  • Number()转换:Number(this.checked)(利用JS类型转换特性,true转数字为1,false为0)

修正后的完整代码

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input type="checkbox" name="options[]" />
  <input type="checkbox" name="options[]" />
  <input type="checkbox" name="options[]" />
  <input type="checkbox" name="options[]" />
  <input type="checkbox" name="options[]" />
</div>
<span></span>

<script>
function findout() {
  var selected = [];
  $(':checkbox').each(function() {
    // 这里改成三元表达式转成0/1,同时用this.checked获取正确状态
    selected.push(this.checked ? 1 : 0);
  });
  $('span').text('checkbox values are: ' + selected.join(','));
}

// 初始化执行一次,展示初始状态
findout();

// 推荐用on()替代delegate()(jQuery 2.1.1完全支持on方法,写法更统一)
$('div').on('click', 'input:checkbox', findout);
</script>

小补充:jQuery从1.7版本开始就推荐用on()方法替代delegate()了,虽然delegate()在2.1.1里还能正常工作,但on()的写法更符合后续版本的规范,也更灵活。

内容的提问来源于stack exchange,提问作者Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:24:21