1:事件的委托处理(Event Delegation)

javascript的事件模型,采用"冒泡"模式,也就是说,子元素的事件会逐级向上"冒泡",成为父元素的事件。

利用这一点,可以大大简化事件的绑定。比如,有一个表格(table元素),里面有100个格子(td元素),现在要求在每个格子上面绑定一个点击事件(click),请问是否需要将下面的命令执行100次?

$("td").on("click", function(){
    $(this).toggleClass("click");
  });

答是不需要,我们只要把这个事件绑定在table元素上面就可以了,因为td元素发生点击事件之后,这个事件会"冒泡"到父元素table上面,从而被监听到。

因此,这个事件只需要在父元素绑定1次即可,而不需要在子元素上绑定100次,从而大大提高性能。这就叫事件的"委托处理",也就是子元素"委托"父元素处理这个事件。

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

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

  });

更好的写法,则是把事件绑定在document对象上面。

  $(document).on("click", "td", function(){

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

  });

如果要取消事件的绑定,就使用off()方法。

  $(document).off("click", "td");    

12. 使用Pub/Sub模式管理事件

当发生某个事件后,如果要连续执行多个操作,最好不要写成下面这样:

  function doSomthing{

    doSomethingElse();

    doOneMoreThing();

  }

而要改用事件触发的形式:

  function doSomething{

    $.trigger("DO_SOMETHING_DONE");

  }

  $(document).on("DO_SOMETHING_DONE", function(){

    doSomethingElse(); }

  );

还可以考虑使用deferred对象。

  function doSomething(){

    var dfd = new $.Deferred();

    //Do something async, then... 
    //dfd.resolve();

    return dfd.promise();

  }

  function doSomethingElse(){

    $.when(doSomething()).then(//The next thing);

  }

最新文章

  1. Code HighLight
  2. js001-JavaScript简介
  3. java 网络编程复习(转)
  4. uva 725 division(水题)——yhx
  5. iOS和android游戏纹理优化和内存优化(cocos2d-x)
  6. poj 2774 Long Long Message 后缀数组LCP理解
  7. Vue 非父子组件通信
  8. CF341C. Iahub and Permutations [DP 排列]
  9. springboot学习随笔(三):Controller参数映射
  10. JQuery Dom的基本操作
  11. A1117. Eddington Number
  12. D. Time to go back(思维)
  13. 【转】python类中super()和__init__()的区别
  14. linux 如何删除文件夹下面的文件和文件夹,只保留两个文件
  15. Git_撤销修改
  16. javascript高级程序设计第三章
  17. PLSQL_统计信息系列09_统计信息在不同数据库中迁移
  18. CodeForces - 1003D
  19. 对Java Serializable(序列化)的理解和总结(二)
  20. 1-13 RHEL7-硬盘介绍和磁盘管理

热门文章

  1. iOS中使用正则
  2. oracleXE(oracle学习版)在windows的安装配置
  3. javascript 原型查找 再次试探~
  4. 使用Xmanager访问CentOS远程桌面
  5. php截取中文无乱码
  6. 基于Dubbo框架构建分布式服务(一)
  7. spring context上下文(应用上下文webApplicationContext)(转载)
  8. 原生javascript 实现 animate
  9. [Java] Spring MVC 知识点
  10. MongoDB【第三篇】MongoDB基本操作