事件的委托处理 javascript

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元素有效,对动态插入的元素无效。

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

时间: 2024-10-01 04:24:56

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

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

href='javascript:function()'和onclick能起到同样的效果,一般来说,如果要调用脚本还是在onclick事件里面写代码,而不推荐在href='javascript:function()' 这样的写法,因为 href 属性里面设置了js代码后,在某些浏览器下可能会引发其他不必要的事件.造成非预期效果. 而且 onclick事件会比 href属性先执行,所以会先触发 onclick 然后触发href,所以如果不想页面跳转,可以设置 onclick里面的js代码执行到最后

js day44 Jquery(筛选,事件,效果,Ajax,javascript跨域)

1     筛选[掌握]     筛选与之前"选择器"雷同,筛选提供函数 1.1   过滤 eq(index|-index),获取第N个元素 ?index:一个整数,指示元素基于0的位置,这个元素的位置是从0算起. ?-index:一个整数,指示元素的位置,从集合中的最后一个元素开始倒数.(1算起) first(),获取第一个元素 last(),获取最后个元素 hasClass(class),检查当前的元素是否含有某个特定的类,如果有,则返回true. filter(exp

原生js 事件的委托

<!DOCTYPE html> <html> <head> <title>原生js事件委托</title> <meta charset="utf-8" /> </head> <body> <ul> <li>我是原来的</li> <li>我是原来的</li> <li>我是原来的</li> <li>我

触发时,文本出现颜色。事件是黏合应用程序中所有用户交互的胶水。DOM和事件的是JavaScript中的黄金搭档

<html> <head> <title>demo</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> /* 示例操作DOM元素 */ window.onload = function(){ //给Dom元素添

DOM事件对象、IE事件对象、旧浏览器事件对象的JavaScript区别

事件流: 事件冒泡:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档). 事件捕获:不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件. DOM2级事件处理程序: .addEventListener();      .removeEventListener(); 在IE浏览器中不起作用!IE事件处理程序: .attachEvent();     .detachEvent(); 跨浏览器常用事件处理程序: var eventUt

IntraWeb在异步事件中返回javascript 脚本

unit Unit1; interface {$DEFINE CODESITE} uses {$IFDEF CODESITE}CodeSiteLogging, {$ENDIF} Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, IWCompButton, Vcl.Controls, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompM

javascript事件监听与事件委托

事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件委托的方式来进行事件的监听. 每个事件都经历三个阶段 捕获 到达目标 冒泡 事件委托需要用到事件的冒泡,冒泡就是事件发生时,上层会一层一层的接收这个事件. 如下页面结构: <body> <div id="div1"> <div id="div2"

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

当我用纯CSS实现这个以后.我开始用JavaScript和样式类来完善功能. 然后,我有一些想法,我想使用Delegated Events (事件委托)但是我不想有任何依赖,插入任何库,包括jQuery.我需要自己实现事件委托了. 我们先来看看事件委托到底是什么?他们是怎么工作的,怎么去实现这种机制. 好,它解决了什么问题? 我们先看个简单的例子. 先假设我们有一组按钮,我一次点击一个按钮,然后我希望被点中的状态设为"active".再次点击时取消active. 然后,我们可以写一些H

JavaScript事件代理和事件委托

一.概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的各位大牛们讲事件委托基本上都用了同一个例子,就是取快递来解释这个现象,我仔细揣摩了一下,这个例子还真是恰当,我就不去想别的例子来解释了,借花献佛,我摘过来,大家认真领会一下事件委托到底是一个什么原理: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台