背景:对一个列表中的所有数据的checkbox操作。通过一按钮的形式,对所有数据的checkbox全选后,并进行提交。
<ul class="main-menu" id="task"> <li class="nav-header hidden-tablet"><input type="checkbox" id="checkall" name="allCheckbox" onclick="checkAll(this);"><span>checkAll</span></li> <li><input type="checkbox" id="checkbox-1" name="checkbox"><span>checkbox1</span></li> <li><input type="checkbox" id="checkbox-2" name="checkbox"><span>checkbox2</span></li> <li><input type="checkbox" id="checkbox-3" name="checkbox"><span>checkbox3</span></li> <li><input type="checkbox" id="checkbox-4" name="checkbox"><span>checkbox4</span></li> <li><input type="checkbox" id="checkbox-5" name="checkbox"><span>checkbox5</span></li> </ul>
问题:第一次的全选没有问题,而当手动去除几个选项后,再点击按钮时,不能实现全选的操作了。
//按钮的全部提交 function submitAllByButton() { var p = parent.window.document; //获取父窗口的对象 var checkall = p.getElementById("checkall"); //在父窗口中的id,通过id获取该总checkbox if(!checkall.checked){ //如果总的选中checkbox没有选中状态,则进行选中 $(checkall).attr("checked", true); } var checkbox = p.getElementsByName("checkbox"); //获得各个分checkbox for(var i = 0 ; i < checkbox.length; i ++){ //循环,也可以用jquery的each var temp = checkbox[i]; if(!temp.checked) { //判断如果没有选中,则进行选中操作 $(temp).attr("checked", true); } } submit(); //最后是提交操作。 }
在这里不讨论业务实现逻辑的好坏。只是讲述当全部提交按钮再点击第二次的时候,不能对手动点选过的checkbox进行了操作。而且在上面代码里的循环里得到的选中结果,是"checked"也就是true。
这到底是怎么回事呢?为什么浏览器会返回给程序这个结果呢?在浏览器显示上明明已经是非“checked"状态。为什么程序得到的却是”checked“呢?
最后,我在jquery API 中找到了答案。
随着一些内置属性的DOM元素或window对象,如果试图将删除该属性,浏览器可能会产生错误。jQuery第一次分配undefined值的属性,而忽略了浏览器生成的任何错误
而在这之前我忽略了checkbox的状态显示,在我的项目里,它显示的两种状态分别是:”undefined“和"checked"
解决办法:
使用JQuery中的.prop()方法,我的修改后代码如下,把.attr换成.prop
//按钮的全部提交 function submitByAllButton() { var p = parent.window.document; var checkall = p.getElementById("checkall"); if(!checkall.checked){ $(checkall).prop("checked", true); } var checkbox = p.getElementsByName("checkbox"); for(var i = 0 ; i < checkbox.length; i ++){ var temp = checkbox[i]; if(!temp.checked) { $(temp).prop("checked", true); } } submit(); }
而上面的解释说明也是在jquery API中的prop方法里有写到。
相关推荐
jquery Checkbox 全选 反选 全不选 多种实现方法 和表单验证
jquery、js操作checkbox全选反选.docx
Jquery全选反选Checkbox 简单好用 复用性很好 欢迎下载
本文实例讲述了jQuery实现checkbox全选的方法。分享给大家供大家参考。具体分析如下: 通过checkbox 进行全选和取消全选的操作,如果通过toggle进行处理,则会出现checkbox无法显示对勾的问题。 使用click事件,根据...
页面上通过一个checkbox实现全选与反选
JQuery实现checkbox的全选取消全选
jquery实现全选和全不选,只要有一个复选框没有选中,全选框不选中;
jquery实现checkbox全选、反选、全部选,很不错的资源,欢迎大家下载学习var langType=""; var arLangType = []; $("[name='langType'][checked]").each(function(i) { arLangType[i]=$(this).val(); }); ...
JQuery 判断checkbox是否选中,checkbox全选,获取checkbox选中值
jQuery制作全选CheckBox 的两种代码 还不错
废话不多说了,直接给大家贴代码了,具体代码如下所示: <...jQuery实现CheckBox全选、全不选</title> [removed][removed] [removed] $(function() { $(':checkbox').click(function(evt)
本篇文章主要是对jquery实现checkbox全选全不选的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
jquery实现checkbox全选、取消全选的代码。
NULL 博文链接:https://xdwangiflytek.iteye.com/blog/1343416
jQuery CheckBox全选、全不选实现代码小结,对于操作jquery的朋友可以参考下。
jquery checkbox全选反选效果代码,需要的朋友可以参考下。
本文主要向大家展示了一段使用jQuery实现checkbox全选的方法,以及编写此方法的背景和过程,非常详细,这里推荐给小伙伴们。
C#.net下通jQuery实现的由CheckBox来控件CheckBoxList的全选操作,通过CheckBox来全选CheckBoxList,当有一个CheckBoxList选中时,CheckBox则被选中,且并且可以取得选中的CheckBox和CheckBoxList的value和text