免责声明:我不使用 jQuery。
这是一个更好地被视为评论的响应,尽管添加了代码。
您说“点击目标是父级” - 抱歉在这里有点厚,但是当您说它是点击目标时,父级是附加了事件侦听器的元素,或者click target
,您的意思是是 evt.target 返回的值吗?(其中 evt 是传递给事件处理函数的单个变量)
为了更好地说明我的意思,请考虑以下代码:
JS部分:
window.addEventListener('load', mInit, false);
function mInit()
{
document.getElementById('clickTarget').addEventListener('click', handleClick, false);
}
function handleClick(evt)
{
console.log(this.id + ': is the id of the "this" element');
console.log(evt.target.id + ": was the id of the evt.target");
}
HTML部分:
<body>
<div id='clickTarget'><a id='link1'>Link1</a><a id='link2'>Link2</a></div>
</body>
现在,当您单击 时link1
,控制台中显示的输出为:
clickTarget: is the id of the "this" element
link1: was the id of the evt.target
可以预见的是,单击link2
显示以下内容:
clickTarget: is the id of the "this" element
link2: was the id of the evt.target
因此,您可以清楚地看到,在此示例中,<div>
是两个元素的父<a>
元素。然而,在每种情况下,目标都是不同的——它不是父元素,而是被点击的实际元素。
您使用过 jQuery,虽然添加功能很简单,但它隐藏了实现细节,减慢了 JS 的执行速度,并且(通常)不必要地增加了页面重量。您的代码非常简短和甜蜜,但返回的内容需要进行一些调查 - 这当然不是很明显。
作为旁注,快速浏览一下 jQuery 文档:jQuery .delegate告诉我们,从 jQuery 1.7 开始,实现此功能的首选方法是.on()
- 它可能没有任何后果,但人们永远不知道..