这是一个关于用jQuery绑定点击事件的问题,我正试图弄清楚。
假设我有一个块元素,我将一个点击绑定到其中,其中包含一个段落标记。
<div id="testClick" style="width:200px; height:100px'>
<p>test click</p>
</div>
我将点击绑定到div:
$('#testClick').bind('click', function(e){
//with parent div (via e.target), do something
});
现在,如果我点击p标签内的文字,e.target = p元素,如果我点击div(周围,而不是文本)e.target = div元素。所以e.target =点击的对象 - 即事件也绑定到指定元素的任何子节点。
这是预期的,但我需要对父div进行操作。并且使用e.target不是获取div引用的可靠方法,因为依赖于div中的位置,e.target返回不同的元素。如果我使用e.target.parent来获取对div的引用,则在文本周围的div中发生单击时会失败。
有没有简单的方法让e.target始终只返回点击最初绑定的确切元素?
(例如,在actionScript中有一个属性“mouseChildren”,可防止事件在绑定元素的子元素上触发)
(考虑以上所有伪代码)
答案 0 :(得分:5)
this
将引用处理程序绑定的元素。
$('#testClick').bind('click', function(e){
alert( this.id );
});
DEMO: http://jsfiddle.net/yX499/
事件发生的事件是从最深层元素一直点击到文档根目录。
如果它遇到一个元素,并且有一个处理程序绑定了发生的事件类型,它会调用该处理程序。
e.target
将始终引用该深层嵌套元素,但this
将引用处理程序绑定到的元素,因此如果事件找到2个元素,并且在前往根,e.target
在2个处理程序中不会更改,但this
将根据绑定元素而有所不同。
答案 1 :(得分:2)
使用this
。为方便起见,jQuery使用this
设置回调:
$('#testClick').bind('click', function(e){
$(this).doStuff();
});