Javascript JQuery输入类型复选框prop(“checked”,false/true)的作用正好相反

Javascript JQuery输入类型复选框prop(“checked”,false/true)的作用正好相反,javascript,jquery,html,checkbox,Javascript,Jquery,Html,Checkbox,我有一个HTML复选框元素,其中一个Label元素通过Label的“for”属性链接到它,我试图通过捕获Label元素的单击事件来选中/取消选中复选框元素,有人能告诉我为什么这段代码与预期相反 $(“标签”)。单击(函数(){ $(此).toggleClass(“活动”); if($(this).hasClass(“活动”)){ $(“checker”).prop(“checked”,true); 控制台日志(“已检查”); } 否则{ $(“#checker”).prop(“checked


我有一个HTML复选框元素,其中一个Label元素通过Label的“for”属性链接到它,我试图通过捕获Label元素的单击事件来选中/取消选中复选框元素,
有人能告诉我为什么这段代码与预期相反

$(“标签”)。单击(函数(){
$(此).toggleClass(“活动”);
if($(this).hasClass(“活动”)){
$(“checker”).prop(“checked”,true);
控制台日志(“已检查”);
} 
否则{
$(“#checker”).prop(“checked”,false);
控制台日志(“未选中”);
}
});
.active{
背景:绿色;
颜色:白色
}

检查一下

发生这种情况的原因是,单击链接到
输入的
标签
元素,此处您的
输入的类型为
复选框
,会更改该复选框的选中状态

您需要通过调用传递给处理程序的事件参数的方法来防止这种行为

下面是一个演示:

//我们正在将事件传递给处理程序,请注意参数“e”。
$(“标签”)。单击(功能(e){
//禁用单击的默认行为。
e、 预防默认值();
$(此).toggleClass(“活动”);
if($(this).hasClass(“活动”)){
$(“checker”).prop(“checked”,true);
控制台日志(“已检查”);
} 
否则{
$(“#checker”).prop(“checked”,false);
控制台日志(“未选中”);
}
});
.active{
背景:绿色;
颜色:白色
}

检查一下

也有类似的问题,我的问题的解决方案是:

$(document).on('click', "label", function(event) {
  $("#checker").prop('checked', event.target.checked);
}).unbind('click', "label");

单击复选框的
标签
与单击复选框本身的作用相同-它切换
选中状态。如果您想知道元素的当前状态是什么,只需查看
prop(“checked”)
。感谢您的回答,是的,我理解单击标签元素等同于单击复选框本身,在上述情况下,复选框默认为未选中(标签上没有活动类),因此,当我第一次单击标签时,它应该选中复选框,另一件事是,我不是要求复选框反转其当前状态,我只是通过测试标签上是否存在活动类来设置其状态。请选中。感谢您的响应,您能告诉我为什么第二部分工作(使用setTimeout)@KaleemUllah该行为与
输入
更改
事件有关,如果您没有通过单击复选框显式更改
输入
的选中属性,则可视为未选中。