我是YUI的新手。有些人可以告诉我为什么我只能使用第二种方法?
Y.all('div span').on('mouseover',mOver);
Y.one('div').delegate('mouseover',mOver,'span');
答案 0 :(得分:1)
第一个为每个div span
元素附加一个单独的事件监听器。如果有很多元素,那么你创造了很多事件,使用了更多的内存等等。即使你这样做,你可能意味着on
而不是delegate
- 就像你&# 39;写完这篇文章,我不认为这两个陈述是等价的。
正如你已经写过的那样,第一种方法是为每个div span
添加一个委派的事件监听器 - 因此它将捕获从跨度的子元素冒出的事件。
第二个将单个事件监听器附加到父div
元素。子span
元素上的任何事件都会通过DOM冒泡*并被事件监听器捕获。
你不应该只使用第二种方法。使用第一种方法可能有合理的理由。但是,在许多情况下(至少根据我的经验),事件委派是首选,因为它更有效,更易于管理。
(*)您可能希望阅读此What is event bubbling and capturing?有关事件冒泡的信息。事件通过DOM冒泡,除非它们在DOM下方的事件监听器停止(YUI中为halt()
)。
此外,如果您现在知道,YUI已被雅虎终止,据我所知,将来任何人都不会维护(http://yahooeng.tumblr.com/post/96098168666/important-announcement-regarding-yui)