$(‘#test checkbox’)之一永远不会被调用,因为你没有带名字的标签复选框。
并且,如果您单击复选框或标签,$(‘#test label’)的回调将被调用一次或两次冒泡,因为input元素是标签的一部分并且是一个联合,因此也接收了事件如果标签是点击(它不是冒泡,你不能做event.stopPropagation())。
如果您以这种方式更改代码,则可以检查此项:
$('#test label').live('click', function (event) {
event.stopPropagation(); //
console.log(event.target.tagName);
});
点击标签:
LABEL
INPUT
点击输入:
INPUT
编辑
如果您只想处理标签上的点击而不是复选框 – 而且您无法更改HTML结构 – 您可以忽略输入元素的事件。
这样:
$('#test label').live('click', function (event) {
if( event.target.tagName === "LABEL" ) {
alert('clicked');
}
});
或使用jQuery测试:
$('#test label').live('click', function (event) {
if( $(event.target).is("label") ) {
alert('clicked');
}
});