javascript的事件模型,采用“冒泡”模式,即子元素的事件会逐级向上“冒泡”,成为父元素的事件。这点可以简化事件的绑定...

例如,一个表格(table)元素含有50个格子(td元素),要求每一个格子绑定一个点击事件,即

  $("td").bind("click",function(){

    $(this).toggleClass("click");

  });这样执行50次,显然不需要。。。

只要 把事件绑定在table元素上即可,因为td元素发生点击事件之后,这个事件会冒泡到父元素table上,从而被监听到。所以这个事件只需要在父元素绑定一次即可,从而大大提高性能。

这就是事件的“委托处理”,也就是子元素“委托”父元素处理这个事件。

具体有两种写法:.delegate()  和   .live()

$("table").delegate("td","click",function(){

    $(this).toggleClass("click");

  });

$("table").each(function(){

  $("td",this).live("click",function(){

    $(this).toggleClass("click");

  });

});

两者写法基本等价,唯一区别在于,.delegate()是当事件冒泡到指定的父元素时触发,.live()则是当事件冒泡到文档的根元素后触发,因此.delegate()稍快一点。

这两种方法均对动态插入的元素有效,bind()只对已经存在的DOM元素有效,对动态插入的元素无效。

此文是浏览其他博客之后想做的笔记,仅供提醒自己...

事件的委托处理 javascript的更多相关文章

  1. jQuery 事件绑定 和 JavaScript 原生事件绑定

    总结一下:jQuery 事件绑定 和 JavaScript 原生事件绑定 及 区别 jQuery 事件绑定 jQuery 中提供了四种事件监听绑定方式,分别是 bind.live.delegate.o ...

  2. JavaScript事件对象与事件的委托

    事件对象 包含事件相关的信息,如鼠标.时间.触发的DOM对象等 js默认将事件对象封装好,并自动的以参数的形式,传递给事件处理函数的第1个参数,如下: document.getElementsByTa ...

  3. 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性

    初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...

  4. 事件的委托处理(Event Delegation)

    javascript的事件模型,采用”冒泡”模式,也就是说,子元素的事件会逐级向上”冒泡”,成为父元素的事件. 利用这一点,可以大大简化事件的绑定.比如,有一个表格(table元素),里面有100个格 ...

  5. 【转】onclick事件与href='javascript:function()'的区别

    href='javascript:function()'和onclick能起到同样的效果,一般来说,如果要调用脚本还是在onclick事件里面写代码,而不推荐在href='javascript:fun ...

  6. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间

    http://blog.csdn.net/pigpigpig4587/article/details/24727791 jQuery事件命名空间 jQuery支持事件命名空间,以方便事件管理.例如,在 ...

  7. html的鼠标双击,单击,移上,离开,事件捕捉,JavaScript

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. javascript事件监听与事件委托

      事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...

  9. 理解JavaScript中的事件路由冒泡过程及委托代理机制

    当我用纯CSS实现这个以后.我开始用JavaScript和样式类来完善功能. 然后,我有一些想法,我想使用Delegated Events (事件委托)但是我不想有任何依赖,插入任何库,包括jQuer ...

随机推荐

  1. Python的50个模块,满足你各种需要

    Python具有强大的扩展能力,我列出了50个很棒的Python模块,包含几乎所有的需要:比如Databases,GUIs,Images, Sound, OS interaction, Web,以及其 ...

  2. IOS UIButton用法详解

    这段代码动态的创建了一个UIButton,并且把相关常用的属性都列举了.希望对大家有用.   //这里创建一个圆角矩形的按钮UIButton *button1 = [UIButton buttonWi ...

  3. 常见Xcode参数设置错误

    错误1 dyld: Library not loaded: /System/Library/Frameworks/AdSupport.framework/AdSupport Referenced fr ...

  4. 用PowerMock mock 临时变量

    在开发时,经常遇到这种情况,被测试方法所调用的类不是通过构造注入的,而是通过临时new出来的,如下面待测方法: public class EmployeeService { private Emplo ...

  5. 总结Themida / Winlicense加壳软件的脱壳方法

    总结下Themida/ Winlicense (TM /  WL) 的脱壳方法. 1, 查看壳版本,这个方法手动也可以,因为这个壳的版本号是写在程序里面的,在解压后下断点即可查看,这里有通用的脚本,我 ...

  6. if 判断中出现逗号

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  7. 滑动的scrollowview的导航渐变

    CGFloat offsetY = scrollView.contentOffset.y; CGFloat alpha = 0; if (offsetY >= 64) { alpha=((off ...

  8. SQL SERVER 2008 r2安装失败之Integration Service

    因工作需要,遂把以前的2008升级到r2,升级失败,具体原因忘了,卸载2008,清了注册表删了文件,结果安装的时候失败了,如下图: 下一步-有错误日志和错误的序列号,错误日志在C:\Program F ...

  9. webpack vuejs项目学习心得

    最近在做移动端的项目,最近webpack和vuejs很火,就想到了用vuejs webpack来构建我的项目 先了解了一些webpack的入门基础 http://webpack.github.io/d ...

  10. Spring事务配置的五种方式(转载)

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...