求助: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
相关产品推荐
相关产品推荐

