您的位置:首页 > Web前端 > JQuery

遇到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 checkbox toggle
相关文章推荐