`
zuroc
  • 浏览: 1312420 次
  • 性别: 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.
"""
分享到:
评论

相关推荐

    JSPatch学习笔记-UI进阶

    **JSPatch学习笔记-UI进阶** 在iOS开发中,JSPatch是一个非常重要的工具,它允许开发者在运行时动态地用JavaScript修改Objective-C代码,极大地提升了开发效率和灵活性。本篇学习笔记将深入探讨如何利用JSPatch在UI...

    前端学习笔记-Node.js

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它让JavaScript得以在服务器端执行,开启了前后端同语言的时代。Node.js利用非阻塞I/O和事件驱动模型,使其在处理高并发场景时表现出高效性能。在黑马程序员的...

    javascript学习笔记1

    ### JavaScript 学习笔记1:数组、DOM与BOM简要总结 #### 数组方法概述 在JavaScript中,数组是一种非常重要的数据结构,用于存储多个值。数组对象提供了多种方法来帮助我们操作数组中的元素。 - **pop()**:从...

    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}{...

    超详细ES6变动,ES6学习笔记,JavaScriptES6学习笔记

    本学习笔记将聚焦于与ES5的区别,帮助初学者快速掌握ES6的核心概念。** 1. **变量声明:let和const** - `let`替代了`var`进行块级作用域的变量声明,解决了`var`的变量提升和函数作用域问题。 - `const`用于声明...

    JavaScript.-Extjs基础学习笔记

    在这个例子中,`MemoryProxy`被用作数据源,但也可以替换为`ScriptTagProxy`等其他代理,以便从远程服务器加载数据。最后,`GridPanel`对象被创建,指定了渲染目标、数据源、列模型、选择模型等属性。 ### 总结 ...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    代码学习笔记

    【代码学习笔记】 DWR(Direct Web Remoting)是一个在Java EE环境中广泛应用的AJAX框架,它的核心功能是使得开发者能够像操作本地JavaScript函数一样,便捷地调用服务器端的Java方法。这一特性极大地简化了前后端...

    javascript设计模式之单体模式学习笔记.docx

    - **事件总线**:作为全局事件发布订阅中心。 #### 五、单体模式的优缺点 **优点**: - 减少了全局变量的使用,避免了命名冲突。 - 便于控制实例的数量,降低资源消耗。 - 便于扩展功能和复用代码。 **缺点**: ...

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

    JavaScript中检测客户端类型的详细知识点包括了对访问网页的用户代理字符串UA的分析,以此来确定访问者的浏览器、平台、操作系统、移动设备以及游戏系统等信息。下面详细讲述这些知识点: 1. 用户代理字符串UA:UA...

    ajax学习笔记

    ### AJAX学习笔记 #### 一、引言 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。...

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

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

    J2EE学习笔记(J2ee初学者必备手册)

    7. **HTML&JavaScript学习笔记**: - **HTML基础**:介绍了HTML的基本语法和常用标签。 - **JavaScript基础**:讲解了JavaScript的基本语法、内置对象等。 - **DHTML**:探讨了动态HTML的概念及其应用。 8. **...

    Vue3教程学习笔记.pdf

    ### Vue3教程学习笔记知识点概览 #### 一、Vue.js简介 - **定义**: Vue.js(发音类似于“view”)是一种专为构建用户界面设计的渐进式JavaScript框架。 - **关注点**: Vue.js主要关注视图层,提供一种自底向上的...

    webView2学习笔记

    在本学习笔记中,我们将深入探讨WebView2的关键特性和应用场景,以及如何有效地在你的应用程序中集成和使用它。 1. **WebView2概述** - WebView2是Microsoft Edge Chromium的嵌入式版本,提供了一种在桌面应用中...

    dwr学习笔记和总结

    ### dwr学习笔记和总结 #### 一、DWR简介 DWR (Direct Web Remoting) 是一个简化Ajax开发的框架,它使得JavaScript能够直接调用服务器端的Java方法成为可能,无需编写复杂的Ajax代码。这极大地提高了开发效率,并...

    JavaScript 学习笔记(十一)

    ### JavaScript 学习笔记(十一):深入理解 Document 对象 #### 一、Document 对象概述 在继续探讨 `document` 对象之前,我们先简要回顾一下 `document` 在 Web 开发中的重要性。`document` 对象代表当前加载在...

    extJs+2.1学习笔记.pdf

    本学习笔记将深入探讨ExtJS 2.1的关键概念和技术,帮助读者掌握这个框架的核心要素。 1. **ExtJs 结构树** 在ExtJS中,应用程序通常基于组件树构建,每个组件都有自己的属性、方法和事件。理解这种结构对于布局...

    LotusDomino学习笔记.doc

    ### LotusDomino学习笔记知识点概览 #### 1. 选取视图的列的内容 (@Trim @DbColumn) - **@Trim**: 是一个内置的LotusScript函数,用于去除字符串两端的空白字符。 - **@DbColumn**: 此函数用于获取指定列的信息。...

    python 爬虫学习笔记

    本文将详细介绍 Python 爬虫学习笔记的知识点,涵盖爬虫基础、网络和前端基础、Requests 模块、请求头、GET 和 POST 请求、代理、Cookie 模拟登录、Quote 和 Unquote、登录和获取 Cookie、Post 和 Session、重试机制...

Global site tag (gtag.js) - Google Analytics