需要点击目标的最终父母

时间:2011-09-04 14:05:56

标签: javascript jquery javascript-events

这是一个关于用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”,可防止事件在绑定元素的子元素上触发)

(考虑以上所有伪代码)

2 个答案:

答案 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();
});