`
zuroc
  • 浏览: 1288681 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

js学习笔记 - JavaScript的事件代理

阅读更多

更新
http://docs.jquery.com/Release:jQuery_1.3
1.3支持原生支持了
不是我不明白
是世界变化太快
上午刚学到的技巧
晚上已经发现过时

....

Live Events

jQuery now supports "live events" - events that can be bound to all current - and future - elements. Using event delegation, and a seamless jQuery-style API, the result is both easy to use and very fast.


学习来源
http://www.yeeyan.com/articles/view/33485/24593
http://www.danwebb.net/2008/2/8/event-delegation-made-easy-in-jquery

用途
"""
想象一下现在我们有一个10列、100行的HTML表格,你希望在用户点击表格中的某一单元格的时候做点什么。比如说我有一次就需要让表格中的每一个单元格在被点击的时候变成可编辑状态。如果把事件处理器加到这1000个单元格会产生一个很大的性能问题,并且有可能导致内存泄露甚至是浏览器的崩溃。相反地,使用事件代理的话,你只需要把一个事件处理器添加到table元素上就可以了,这个函数可以把点击事件给截下来,并且判断出是哪个单元格被点击了。

...

    * 那些需要创建的以及驻留在内存中的事件处理器少了。这是很重要的一点,这样我们就提高了性能,并降低了崩溃的风险。
    * 在DOM更新后无须重新绑定事件处理器了。如果你的页面是动态生成的,比如说通过Ajax,你不再需要在元素被载入或者卸载的时候来添加或者删除事件处理器了。

潜在的问题也许并不那么明显,但是一旦你注意到这些问题,你就可以轻松地避免它们:

    * 你的事件管理代码有成为性能瓶颈的风险,所以尽量使它能够短小精悍。

我注:因为所以子元素的该事件都要过这里,所以先做判断是不是符合条件,再运算

    * 不是所有的事件都能冒泡的。blur、focus、load和unload不能像其它事件一样冒泡。事实上blur和focus可以用事件捕获而非事件冒泡的方法获得(在IE之外的其它浏览器中),不过我们改天再说这个吧。
    * 在管理鼠标事件的时候有些需要注意的地方。如果你的代码处理mousemove事件的话你遇上性能瓶颈的风险可就大了,因为mousemove事件触发非常频繁。而mouseout则因为其怪异的表现而变得很难用事件代理来管理。

"""

配合jquery的用法
1.原始用法

$('#thing').click(function(e) {
  var target = $(e.target);

  if (target.hasClass('quit') return doQuitStuff();
  if (target.hasClass('edit') return doEditStuff();
  // and so on...
});

2.便捷方式
a.定义

jQuery.fn.delegate = function(eventType, rules) {
  return this.bind(eventType, function(e) {
    var target = $(e.target);
    for(var selector in rules)
      if(target.is(selector))
        return rules[selector].apply(this, arguments)
  })
}

b.
使用

$("#thing").delegate("click", {
  ".quit": function() { /* do quit stuff */ },
  ".edit": function() { /* do edit stuff */ }
})
当然
"""
I’m not sure of the performance implications of using is() so heavily but some form of caching could be added if it was a problem. Still, it’s a really nice little bit of syntactic sugar that’s going into Low Pro for jQuery and I’ll be using it a lot.
"""
分享到:
评论

相关推荐

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    awesome-[removed]Javascript第4版学习笔记

    Javascript第4版学习笔记 ​ 本书从 JavaScript 的起源开始,逐步讲解到新出现的技术,其中重点介绍 ECMAScript 和 DOM 标准。在 此基础上,接下来的各章揭示了 JavaScript 的基本概念,包括类、期约、迭代器、代理...

    LotusDomino学习笔记(400页涵盖代理和公式使用)

    111. 使用代理生成 XML 284 112. 使用视图生成 XML 286 113. 执行算术运算 288 114. Keep URLs simple by making them relative 292 115. Quick, easy, foolproof field level help 294 116. Hiding attachments ...

    LotusDomino学习笔记.doc

    111. 使用代理生成 XML 284 112. 使用视图生成 XML 286 113. 执行算术运算 288 114. Keep URLs simple by making them relative 292 115. Quick, easy, foolproof field level help 294 116. Hiding attachments ...

    Lotus Domino WEB详细 学习笔记

    111. 使用代理生成 XML 284 112. 使用视图生成 XML 286 113. 执行算术运算 288 114. Keep URLs simple by making them relative 292 115. Quick, easy, foolproof field level help 294 116. Hiding ...

    javascript学习笔记(七)Ajax和Http状态码

    或者使用服务器代理,代理XMLHttpRequest文件 AJAX是基于现有的Internet标准,并且联合使用它们: XMLHttpRequest 对象 (异步的与服务器交换数据) JavaScript/DOM (信息显示/交互) CSS (给数据定义样式) XML (作为...

    JS设计模式笔记和代码

    JavaScript常见的一些设计模式学习笔记和代码实现。包括工厂模式、单例模式、代理模式、发布订阅模式、中介者模式等等内容。

    javascript 学习笔记(六)浏览器类型及版本信息检测代码

    javascript部分代码: 检测的原理主要根据 浏览器的用户代理报头nanigator.userAgent中提取到浏览器和类型及版本信息,利用正则表达式可以很容易的满足我们的需求,如对正则表达式不熟悉,可参照此

    JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)

    //取得用户代理字符串 并全部小写。 var ua = navigator.userAgent.toLowerCase(); [removed](ua); 在上篇文章给大家介绍了基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏...

    Learning-Notes:学习笔记

    学习笔记 后端开发 Java maven netty Redis Spring Spring4新特性 Spring使用注意事项 Spring验证Validation SpringBoot 开发知识 相关技术名词 开发技术框架工具整理 架构知识 开发过程注意事项整理 常用开发技巧 ...

    JavaScript高级程序设计(第3版)学习笔记9 js函数(下)

    9、作为值的函数 在一般的编程语言中,如果要将函数作为值来使用,需要使用类似函数指针或者代理的方式来实现,但是在ECMAScript中,函数是一种对象,拥有一般对象具有的所有特征,除了函数可以有自己的属性和方法...

    es6-notes:ES6+ 学习笔记 https

    ES下一个学习笔记 数字 大批 目的 功能 班级 象征 放 地图 正则表达式 代理人 反映 承诺 发电机 迭代器 模块 ES2016(ES7) Array.prototype.includes() 求幂运算符 ES2017(ES8) 细绳 目的 异步等待 尾随...

    learn-notes:学习笔记

    React 代理 小程序 小程序内嵌html-分享注意事项 小程序分包预加载和分包 微信小程序添加外部字体 微信小程序遇到的兼容问题(时间) 前端工程 前端工程化浅谈 前端搜索引擎优化基础(SEO) 移动端浏览器前端优化...

    收集的常见的专业问题解决办法.rar

    2009-02-24 08:42 165165 37065 常见的专业问题解决办法\Java核心技术学习笔记--异常和调试_Believe ┭┮ YourSelf.mht 2009-03-20 16:36 142683 39110 常见的专业问题解决办法\JR - 专题论坛问题 - eclipse??如何...

    ES6-learning:学习ES6的笔记

    更方便的数据访问第六章符号和符号属性第七章与地图第八章迭代器(Iterator)和生成器(Generator)第九章JavaScript中的类第十章增强的细分功能第十一章Promise与异步编程第十二章代理(Proxy)和反射(Reflection...

    java8集合源码分析-AndroidLearn:Android学习笔记

    java8 集合源码分析 Java 内存模型 并发/多线程 类加载 垃圾回收 Android UI 生命周期 启动模式 ActivityManagerService ...代理模式 装饰者模式 架构 MVVM 组件化 JavaScript Linux 版本控制 实战

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    学习注:记录概念和问题

    学习笔记记录我发现的概念和问题HTML5,CSS3,JavaScript,设计模式,ReactJS,其他将来构建数据结构和算法HTML5 属性与属性CSS3 CSS特异性显示:行内,块,行内块伪类位置溢出CSS预处理器JavaScript 范围let,const...

    cat-mall:尚硅谷《谷粒商城》-开发笔记,另外学习文档笔记,期待大家的加入,

    弹性搜索Redis基本使用与Lua脚本Redisson分布式锁性能压测模拟Nginx反向代理,动静分离,负载均衡多线程与初步单点登录与社交登录RabbitMQ消息静脉Nacos服务注册,发现,配置中心分散事务与Seata秒杀系统设计定时...

    examples:sylabs.io博客中用于创建和使用示例容器的文件和说明

    例子 在此处,您可以从找到...JavaScript 节点JS 茱莉亚(Julia) 八度 RStudio Ruby 机器学习 咖啡 侦探 过氧化氢 霍罗沃德 英特尔-Tensorflow Jupyter笔记本 橙色数据挖掘 火花 威卡 消息代理 兔子MQ 包装 FPM

Global site tag (gtag.js) - Google Analytics