jquery单击标签+复选框检测哪个?
我正在尝试检查event.target.nodeName,如下所示:jquery单击标签+复选框检测哪个?,jquery,Jquery,我正在尝试检查event.target.nodeName,如下所示: $("input").click(function(e){ if(e.target.nodeName == "LABEL") { alert('label click'); e.preventDefault(); } else { alert($(this).attr('checked') ? 'checked': 'unchecked'); } }); 但
$("input").click(function(e){
if(e.target.nodeName == "LABEL") {
alert('label click');
e.preventDefault();
} else {
alert($(this).attr('checked') ? 'checked': 'unchecked');
}
});
但名字永远不等于标签?我做错了什么
Quick您应该选择labelparent元素。当前,单击处理程序的唯一目标是输入元素:
$("label").click(function(e){
// ...
})
您根本没有选择标签。请先选择标签,然后重试: 你在这里碰到了错误的元素
$('label').on('click', function(e) {
// Your logic here
});
而不是点击输入
确保使用.on.委派事件。我认为这不起作用的原因是,只有在单击输入时才会运行:
if(e.target.nodeName == "LABEL") {
在此场景中,节点名将始终等于为事件选择的元素。除非您首先选择标签,否则无法附加到标签。如果您想使用e.target,请始终绑定容器元素,基本上处理程序是在事件一直冒泡到子元素时执行的。吹毛求疵:您的示例使用on,但它不是委托。我甚至不确定我是否正确,因为您的代码确实处理从输入冒泡而来的单击,但通常当我看到术语委托时,它指的是当您以子代节点为目标,但处理程序像$label中那样附加到父代的情况。单击时,'输入',函数。。。,这并不能解决这里的OP问题。所以,忘了我说的吧,我不确定这从技术上讲是否是授权。@bfavaretto。。我想我在这里用错了。。看来你是对的: