遇到jQuery中toggle()与checkbox的冲突,使用其他方法实现同样的效果(工作笔记)
2014-07-10 10:24
776 查看
如上图所示,(使用了jQuery中的table插件)我本来想要的效果是:单击左上角的checkbox(id为“all”),那么下面的所有的checkbox(id为“cb")就会全部被选中。我开始的jQuery代码是这样的:
$("#all").toggle(function(){
$(":checkbox").attr("checked","true");},
function(){
$("table :checkbox").removeAttr("checked");}
);
这些代码的效果:单击单击左上角的checkbox(id为“all”),下面的所有的checkbox(id为“cb")就会全部被选中;再一次单击左上角的checkbox(id为“all”),下面的所有的checkbox(id为“cb")就会全部被取消。但左上角的checkbox(id为“all”)中的√,从来没出现。上网查了,原因是:
toggle方法中阻止了缺省动作
jquery原码中toggle在注册click时调用了event.preventDefault();就是把原本绑定的默认事件摸掉。那么,问题很明显,就是与原本点击checkbox的出现勾的事件被jquery无情的抹杀。
后来弄了好久,终于让我用其他的方法实现同样的效果:
代码如下:
$("#all").click(function(event){
if(($("#all").attr("checked")) == true){
$("input[type=checkbox][name=cb]").each(function(){
$(this).attr("checked","true");
});
event.stopPropagation();
}
至于checkbox中存在冒泡事件的原因,我不知道。当这些代码竟然实现这样的效果:单击单击左上角的checkbox(id为“all”),下面的所有的checkbox(id为“cb")就会全部被选中,左上角的checkbox(id为“all”)中的√出现;再一次单击左上角的checkbox(id为“all”),下面的所有的checkbox(id为“cb")就会全部被取消,左上角的checkbox(id为“all”)中的√消失。至于原因在探讨中》》》》》》》》》》
相关文章推荐
- 【jQuery】调用toggle()方法实现动画切换效果
- 如何使用JQuery和HTML5 Canvas两种方法实现弹幕效果:
- React学习笔记:使用jquery实现动画效果淡入淡出
- JQuery学习笔记之JQuery效果hide、show以及toggle方法的callback参数
- 【jQuery】使用slideToggle()方法实现图片“变脸”效果
- jQuery使用fadein方法实现渐出效果实例
- jquery使用slideDown实现模块缓慢拉出效果的方法
- jQuery方法简洁实现隔行换色及toggleClass的使用
- jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
- 使用CSS3和Checkbox实现JQuery的一些效果
- 使用 jquery 实现 checkbox “全选/全不选” 效果
- jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
- jQuery方法简洁实现隔行换色及toggleClass的使用
- 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为
- JQuery:使用 toggle 切换 css 时,checkbox不能选中的解决方法;在checkbox中"放入"文字
- Element UI 中可展开表格手风琴效果实现(toggleRowExpansion方法的正确使用方式)
- 使用jquery的sortable插件实现拖动效果,以及影响blur事件触发的解决方法
- 使用jquery的sortable插件实现拖动效果,以及影响blur事件触发的解决方法
- jQuery使用fadeout实现元素渐隐效果的方法
- 【jQuery】使用fadeIn()与fadeOut()方法实现淡入淡出效果