关于jQuery实时点击事件的错误event.target

时间:2012-10-31 15:21:45

标签: jquery

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

$('.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的其他部分时,我不需要使用它。

3 个答案:

答案 0 :(得分:7)

e.target是链接标记。

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

<强>代码:

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

注意:从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。旧版jQuery的用户应优先使用.delegate() {。{1}}。

答案 1 :(得分:2)

是的,使用this就像使用任何其他活动一样。

drilldown.loadActions($(this));

答案 2 :(得分:1)

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

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

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

  

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