如果您只想响应标签上的点击而不是复选框上的点击,您可以查看event.target属性。它引用调用侦听器的元素,以便如果单击不在该元素上,则不要执行操作:
window.onload = function(){
var el = document.getElementById('wow');
el.addEventListener('click', function(event) {
if (this === event.target) {
/* click was on label */
alert('click was on label');
} else {
/* click was on checkbox */
event.stopPropagation();
return false;
}
}, false);
}
另一方面,如果您只想响应点击复选框(点击标签也会产生点击复选框),然后执行相反的操作。对标签上的点击什么也不做,让复选框中的点击通过:
window.onload = function(){
var el = document.getElementById('foolabel');
el.addEventListener('click', function(event) {
if (this === event.target) {
/* click was on label */
event.stopPropagation();
return false;
} else {
/*
** click is from checkbox, initiated by click on label
** or checkbox
*/
alert('click from checkbox');
}
}, false);
}
这个版本似乎有最自然的行为。但是,更改标记以使标签不再包裹复选框将意味着不会调用侦听器。