10

在事件侦听器中使用更好/更快吗thisevent.target

我一直在编写这样的代码(例如 jQuery):

jQuery('input').bind('keyup', function (e) {
 var j = jQuery(e.target);
 foo(j.attr('id') , j.val() );
});

我被告知要替换e.target为,this因为它“更好”。两者之间真的有任何优势吗?

我使用 target 是因为它是一个更通用的解决方案,因为它适用于委托事件。我在进行基准测试时遇到了麻烦,因为我的测试被绑定弄得杂乱无章(尽管很明显,在这种情况下,差异太小了,无论如何都不重要)

4

2 回答 2

16

一个并不比另一个好,但它们做不同的事情:this指的是事件附加到的元素,而 event.target 是调用事件的元素。

例如

div id=foo   
   div id=bar

当 click 附加到 foo 并单击 bar 时,事件将冒泡到 foo。如果将引用fooevent.targetbar

最后,这取决于您需要处理哪个元素。

在 api.jquery.com/event.target 上有一个小例子来说明 event.target。这是一个使用该示例的小示例,但也显示了这个:http : //jsbin.com/adifan/edit#javascript,html,live

于 2012-07-03T09:15:27.140 回答
1

好吧,jQuery 文档对此很清楚:-)

目标属性可以是为事件注册的元素或它的后代。将 event.target 与 this 进行比较通常很有用,以确定是否由于事件冒泡而正在处理事件。当事件冒泡时,此属性在事件委托中非常有用。

(来源:http ://api.jquery.com/event.target/ )

此链接解释了术语“事件冒泡”:http ://www.quirksmode.org/js/events_order.html

于 2012-07-03T09:15:09.517 回答