在事件监听器中使用this
或event.target
我一直在编写这样的代码(例如jQuery):
jQuery('input').bind('keyup', function (e) {
var j = jQuery(e.target);
foo(j.attr('id') , j.val() );
});
我被告知将e.target
替换为this
因为它“更好”。这个或那个真的有什么优势吗?
我使用目标,因为它是一种更通用的解决方案,因为它适用于委派事件。我在基准测试时遇到了麻烦,因为我的测试结果很混乱(尽管很明显,在这种情况下,差异太小而无关紧要)
答案 0 :(得分:16)
一个并不比另一个好,但它们做了不同的事情: this 指的是事件附加到的元素,而event.target是调用事件的元素。< / p>
例如
div id=foo
div id=bar
当点击附加到foo并点击了条形图时,该事件将冒泡到foo。如果此将引用 foo 和 event.target 到 bar
最后,它取决于您需要处理的元素。
api.jquery.com/event.target上有一个小例子,它说明了event.target。这是一个使用该示例的小样本,但也显示 this :http://jsbin.com/adifan/edit#javascript,html,live
答案 1 :(得分:1)
嗯,jQuery文档很清楚: - )
target属性可以是为事件注册的元素或其后代。将event.target与此进行比较通常很有用,以确定是否由于事件冒泡而处理了事件。当事件冒泡时,此属性在事件委派中非常有用。
(资料来源:http://api.jquery.com/event.target/)
此链接解释了“事件冒泡”一词:http://www.quirksmode.org/js/events_order.html