我真的需要css方法的事件委托方法吗?

时间:2014-11-17 18:14:44

标签: jquery

该元素不是动态添加的,而是通过jQuery的css()方法动态应用css。在今天之前,我只使用事件委托方法为那些动态添加的元素而不是那些动态应用css属性和值的元素,即通过一些脚本。

以下不适合我:

$(window).on('resize',function(){
   el.css({.....});
   someMethod(el);
}).resize();

我确信那些通过jQuery应用css的元素不需要使用事件委托方法。

但经过艰苦努力后,以下方法运作得非常完美:

$(window.parent).on('resize',window,function(){
   el.css({.....});
   someMethod(el);
}).resize();

所以,我不确定为什么这里需要应用事件委托方法?

更新

根据@ jfriend00的回答,我开始知道关键原因是因为没有。 3(事件适用于单亲的多个孩子)。

但是,如果不使用事件委托方法,则以下方法有效:

$(window).on('resize',function(){
   el.css({.....});
   someMethod(el);
}).resize();//even if resize() is removed from here won't work
$(window).trigger('resize');//even it is removed from here won't work

这两个都需要调整大小。为什么会这样?

1 个答案:

答案 0 :(得分:0)

我没有看到为什么您需要使用window对象进行事件委派或获取任何内容的任何理由。

在这些情况下,事件委托非常有用:

  1. 您要定位的DOM对象尚不存在,因此您可以定位存在的父对象,当事件到达父对象时,代码可以查看原始对象是否与选择器匹配。这允许事件处理程序(对于某些事件)使用尚未创建的对象。

  2. 在安装事件处理程序后的某个时间,将替换要定位的DOM对象。这导致了与上面第1点相同的问题,即安装事件处理程序时新创建的对象不存在。

  3. 将单个事件处理程序应用于公共父级时效率更高,然后可以从一个事件处理程序中为所有子对象提供服务。

  4. 我没有看到任何这些方法适用于您的情况的原因。您只是在resize对象上侦听window事件,并且在您安装事件处理程序时存在window对象,并且未被替换,并且您并未尝试一次为很多儿童物品服务。