原因:label和input标签嵌套,点击label的时候,事件冒泡一次,同时会触发关联的input的click事件,导致事件再次冒泡,以至于达不到我们想要的触发效果。
不使用js解决方法:将input放到label外面(推荐使用这种方法)
<input type="checkbox" value="" name="test" id="test" /> <label for="test" class="testCbox">hello world</label>
js处理方法:
方法一、对event.target进行判断
$(".multi-list").on("click","label.checkBtn",function(event){
if($(event.target).is('input')){//对点击目标元素做判断
return;
}
if($(this).hasClass("selected")){
console.log("删除");
$(this).removeClass("selected");
}else{
console.log("选中");
$(this).addClass("selected");
}
})方法二、将事件绑定在input checkbox上,我们就不会触发label的click事件了
$(".multi-list").on("click","input.checkbox",function(){
if(!$(this).parent().hasClass('selected')){
console.log("选中");
$(this).parent().addClass("selected");
}else{
console.log("删除");
$(this).parent().removeClass("selected");
}
})