【发布时间】:2011-12-27 23:56:11
【问题描述】:
我试图了解使用jQuery .on() method 的直接 和委托 事件处理程序之间的这种特殊区别。具体来说,本段最后一句:
当提供
selector时,事件处理程序被称为委托。当事件直接发生在绑定元素上时,不会调用处理程序,而只会调用与选择器匹配的后代(内部元素)。 jQuery 将事件从事件目标冒泡到附加处理程序的元素(即从最内到最外的元素),并为匹配选择器的路径上的任何元素运行处理程序。
“为任何元素运行处理程序”是什么意思?我做了一个test page 来试验这个概念。但以下两种构造都会导致相同的行为:
$("div#target span.green").on("click", function() {
alert($(this).attr("class") + " is clicked");
});
或者,
$("div#target").on("click", "span.green", function() {
alert($(this).attr("class") + " is clicked");
});
也许有人可以参考一个不同的例子来澄清这一点?谢谢。
【问题讨论】:
-
@KevinWheeler 我在下面评论了你的小提琴但here,基本上它没有正确设置(你绑定到父元素,并且委托是为孩子准备的)。要回答您的问题,这意味着委托处理程序将匹配新添加的元素,而没有委托的处理程序则不会。委托的好处是连接到浏览器的事件更少,从而导致应用程序的内存消耗更少,但代价是它增加了处理点击的时间(最少)。如果您正在制作游戏,请不要委托。
-
您引用的“测试页”不起作用。
标签: javascript jquery event-bubbling jquery-events event-binding