3

当我使用以下内容为单击事件注册处理程序时:

$('.drilldown-action > li').live('click', function(event){
    drilldown.loadActions($(event.target));
});

使用 HTML:

<ul class="drilldown-action">
    <li data-action="Dummy"><a href="#">Dummy</a> Dum</li>
</ul>

在浏览器中(使用 Chrome)我点击a标签,我怎样才能获得注册事件的 jQuery 对象?我希望li元素成为事件目标,因为这就是我放入选择器的内容。我知道我可以只.parent()用于这种情况,但是有没有办法获取与选择器匹配的对象,而不是底部事件目标?使用.parent()也很痛苦,因为当单击其他部分时li,我不必使用它。

4

3 回答 3

7

e.target是链接标签。

您应该使用this来获取li绑定到处理程序的元素的标签。

代码:

$('.drilldown-action > li').live('click', function(event){
    drilldown.loadActions($(this));
});

注意:从 jQuery 1.7 开始,该.live()方法已被弃用。用于.on()附加事件处理程序。旧版本 jQuery 的用户应该.delegate()优先使用.live().

于 2012-10-31T15:22:53.427 回答
2

是的,this就像在任何其他事件中一样使用。

drilldown.loadActions($(this));
于 2012-10-31T15:23:23.380 回答
1

在这种情况下,我会确保我总是通过我想要的:

$('.drilldown-action > li').live('click', function(event){
    drilldown.loadActions($(event.target).closest('li'));
});

根据 jQuery api 文档,closest()将始终传递“li”元素:

描述:对于集合中的每个元素,通过测试元素本身并向上遍历其在 DOM 树中的祖先来获取与选择器匹配的第一个元素。 https://api.jquery.com/closest/

于 2016-02-22T12:33:03.513 回答