首页
学习
活动
专区
圈层
工具
发布

【前端】详解JavaScript事件代理(事件委托)

事件传播分成三个阶段: 捕获阶段:从window对象传导到目标节点(上层传到底层)称为“捕获阶段”(capture phase),捕获阶段不会响应任何事件; 目标阶段:在目标节点上触发,称为“目标阶段”...= "事件委托"; }; item3.onclick = function() { alert("hi"); }; 如果在一个复杂的 Web 应用程序中,对所有可单击的元素都采用这种方式...,那么结果就会有数不 清的代码用于添加事件处理程序。...使用事件委托,只需在 DOM 树中尽量最高的层次上添加一个事件处理程序,如下所示: var item1 = document.getElementById("goSomewhere");...事件delegate()实现 delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

1.7K10

02-老马jQuery教程-jQuery事件处理

绑定简单事件 在DOM中DOM0级绑定事件的方式是直接给事件属性赋值,但是这样有个缺点就是每次指定的事件处理程序会把之前的覆盖掉。...on()方法绑定事件处理程序到当前选定的jQuery对象中的元素。on汇总了bind和live两种绑定事件的方式。可以支持一般的bind方法或者委托的方法。...on()方法绑定事件处理程序到当前选定的jQuery对象中的元素。on汇总了bind和live两种绑定事件的方式。可以支持一般的bind方法或者委托的方法。...要删除特定的委派事件处理程序,提供一个selector 的参数。选择器字符串必须是完全匹配递到.on()事件处理程序附加的选择器。要删除非委托元素上的所有事件,使用特殊值 "**" 。...IE678:window.event 标准浏览器直接从事件处理程序的参数中获得事件对象e e = e || window.event; 在jQuery的事件处理程序中,可以直接获取事件对象,所有浏览器都兼容

7.6K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    02-老马jQuery教程-jQuery事件处理

    绑简单事件 在DOM中DOM0级绑定事件的方式是直接给事件属性赋值,但是这样有个缺点就是每次指定的事件处理程序会把之前的覆盖掉。...on()方法绑定事件处理程序到当前选定的jQuery对象中的元素。on汇总了bind和live两种绑定事件的方式。可以支持一般的bind方法或者委托的方法。...on()方法绑定事件处理程序到当前选定的jQuery对象中的元素。on汇总了bind和live两种绑定事件的方式。可以支持一般的bind方法或者委托的方法。...要删除特定的委派事件处理程序,提供一个selector 的参数。选择器字符串必须是完全匹配递到.on()事件处理程序附加的选择器。要删除非委托元素上的所有事件,使用特殊值 "**" 。...IE678:window.event 标准浏览器直接从事件处理程序的参数中获得事件对象e e = e || window.event; 在jQuery的事件处理程序中,可以直接获取�事件对象,所有浏览器都兼容

    3.7K80

    简单说 JavaScript中的事件委托(上)

    事件委托 是什么 先来看看事件委托的概念 事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。 事件委托,你叫他 事件代理 也可以,都是一个意思。...event 对象 任何事件触发后将产生一个event对象 event对象记录事件发生时的鼠标位置、键盘按键状态和 触发对象等信息 一般情况下,绑定事件处理函数时,event对象默认以第一个参数方式传入...,而是绑定在已经存在于页面上的父元素,冒泡到父元素上时,执行绑定在父元素上的事件处理函数,这样能减少很多不必要的工作。...总结 这篇文章是比较基础的,还有一些东西没有说,比如文中说 事件委托的实现 的时候,举的例子比较简单,监听的 li 里面没有子元素,如果存在子元素时,那点击子元素 事件就不会触发,那怎么办呢?...还有 JQuery中的事件委托 又是怎么做的呢? 看这里 简单说 JavaScript中的事件委托(下)

    1.1K20

    简单说 JavaScript中的事件委托(下)

    ,所以就不会打印 li 被点击了 ,当点击 li 的时候,事件源是 li ,所以就可以了,但是我们往往需要的是,不管是点击li,还是点击 了 li 的子元素,都需要执行操作。...jQuery中的事件委托 jQuery中事件委托主要是靠on( ) 方法,我们先来看看 on( ) 方法的使用说明 on( ) 方法主要有以下两种形式的用法 用法一 jQueryObject.on...selector 可选/String类型,一个jQuery选择器,用于指定哪些后代元素可以触发绑定的事件。...data 可选/任意类型,触发事件时,需要通过event.data传递给事件处理函数的任意数据。 handler Function类型,指定的事件处理函数。...事件委托 的地方,应该还是比较多的,希望大家都能理解这个东西。

    79440

    继续死磕前端

    6. mouseenter() 鼠标进入(进入子元素不触发) 7. mouseleave() 鼠标离开(离开子元素不触发) 8. hover() 同时为mouseenter和mouseleave事件指定处理函数...(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理...就这样一层一层往上冒的效果,我们形象的称为冒泡。那么它有什么作用呢?...答:事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。...,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

    3.7K10

    React学习笔记—JSX

    其次,在JSX中可以通过onClick这样的方式给一个元素添加一个事件处理函数,当然,在HTML中也可以用onclick(注意和onClick拼写有区别),但在HTML中直接书写onclick一直就是为人诟病的写法...,网页应用开发界面一直倡导的是用jQuery的方法添加事件处理函数,直接写onclick会带来代码混乱的问题。...这就带来一个问题,既然长期以来不倡导在HTML中使用onclick,为什么在React的JSx中我们却要使用onclick这样的方式来添加事件处理函数呢?...image.png 我们在Counter的JSX中使用了onClick,但并没有产生直接使用的onclick(注意是onclick不是onClick)的HTML,而是使用了事件委托(event delegation...所有的点击事件都被这个事件处理捕获,然后根据具体组件分配给特定函数,使用事件委托的性能当然要比每个onClick都挂载一个事件处理函数要高。

    1.1K40

    深入理解事件

    如果浏览器采用的是事件冒泡,那么触发顺序是C–>B–>A,由内而外,像气泡一样,从水底浮向水面;如果采用的是事件捕获,那么触发顺序是A–>B–>C,从上到下,像石头一样,从水面落入水底。...7.2 为什么要使用事件委托: 简单来说,就是为了减少不必要的dom操作,优化性能。 一般来说,dom需要有事件处理程序,我们都会直接给它设事件处理程序就好了,那如果是很多的dom需要添加事件处理呢?...,这就是为什么性能优化的主要思想之一就是减少DOM操作的原因;如果要用事件委托,就会将所有的操作放到js程序里面,与dom的操作就只需要交互一次,这样就能大大的减少与dom的交互次数,提高性能; 每个函数都是一个对象...ul>div,有这样一个机制,那么我们给最外面的div加点击事件,那么里面的ul,li,a做点击事件的时候,都会冒泡到最外层的div上,所以都会触发,这就是事件委托,委托它们父级代为执行事件。...8.2 html事件处理程序中的事件对象 <input id="btn" type="button" value="click" onclick=" console.log('html事件处理程序'+event.type

    1.2K40

    JavaScript高级程序设计-性能整理(二)

    将变化回调委托给微任务来执行可以保证事件同步触发,同时避免随之而来的混乱。为 MutationObserver 而实现的记录队列,可以保证即使变化事件被爆发式地触发,也不会显著地拖慢浏览器。...在创建 GUI 的语言如 C#中,通常会给 GUI 上的每个按钮设置一个 onclick 事件处理程序。这 样做不会有什么性能损耗。...除了通过事件委托来限制这种连接之外,还应该及时删除不用的事件处理程序。很多 Web 应用性能不佳都是由于无用的事件处理程序长驻内存导致的。 导致这个问题的原因主要有两个。..."; }; 在这个重写后的例子中,设置 元素的 innerHTML 属性之前,按钮的事件处理程序先被删除了。这样就可以确保内存被回收,按钮也可以安全地从 DOM 中删掉。...如果提前知道页面某一部分会被使用innerHTML删除,就不要直接给该部分中的元素添加事件处理程序了。把事件处理程序添加到更高层 级的节点上同样可以处理该区域的事件。

    1.1K30

    JavaScript(十二)

    事件处理程序的名字以 “on” 开头,因此 click 事件的事件处理程序就是 onclick,load 事件的事件处理程序就是 onload。为事件指定处理程序的方式有好几种。...如,要在按钮被单击时执行一些 JavaScript,可以像下面这样编写代码: onclick="alert('Clicked...也可以删除通过 DOM0 级方法指定的事件处理程序,只要像下面这样将事件处理程序属性的值设置为 null 即可: btn.onclick = null; //删除事件处理程序 DOM2 级事件处理程序...在文本插入文本框之前会触发 textInput 事件 内存和性能 ---- 在 JavaScript 中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能。 导致这一问题的原因是多方面的。...事件委托 对”事件处理程序过多”问题的解决方案就是事件委托。 事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如,click 事件会一直冒泡到 document 层次。

    4.5K20

    JSX onClick 和 HTML onclick 的区别

    在 JSX 中可以通过 onClick 这样的方式给一个元素添加一个事件处理函数,当然,在 HTML 中也可以用 onclick (小写 c),但在 HTML 中直接书写 onclick 一直就是为人垢病的写法...,网页应用开发界一直倡导的是用 jQuery 的方法添加事件处理函数,直接写 onclick 会带来代码混乱的问题。...: 既然长期以来一直不倡导在 HTML 中使用 onclick,为什么在 React 的 JSX 中我们却要使用 onClick 这样的方式来添加事件处理函数呢?...JSX 中的组件使用 onClick,并不会产生直接使用 onclick 的 HTML,而是使用了事件委托(event delegation)的方式处理点击事件,无论有多少个 onClick 出现,其实最后都只在...所有的点击事件都被这个事件处理函数捕获,然后根据具体组件分配给特定函数,使用事件委托的性能当然要比为每个 onClick 都挂载一个事件处理函数要高。

    2.3K20

    react思维

    即使现在,在HTML中直接使用onclick很不专业,原因如下:· •onclick添加的事件处理函数是在全局环境下执行的,这污染了全局环境,很容易产生意料不到的后果;•给很多DOM元素添加onclick...•onClick使用了事件委托(event delegation)的方式处理点击事件,无论有多少个onClick出现,其实最后都只在DOM树上添加了一个事件处理函数,挂在最顶层的DOM节点上。...所有的点击事件都被这个事件处理函数捕获,然后根据具体组件分配给特定函数,使用事件委托的性能当然要比为每个onClick都挂载一个事件处理函数要高。...与jQuery不同,用React开发应用是另一种体验,用React开发的ClickCounter组件并没有像jQuery那样做“选中一些DOM元素然后做一些事情”的动作。...面对这样的性能,以jquery作为开发语言 在react的实现方式中,VirutalDOM不会触及浏览器的部分,只是存在于JavaScript空间的树形结构,每次自上而下渲染React组件时,会对比这一次产生的

    1.8K20

    jQuery 事件(三) 事件的绑定和解绑、对象的使用、自定义事件

    事件的绑定和解绑 on()的多事件绑定 之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理。...因为li都有一个共同的父元素,而且所有的事件都是一致的,这里我们可以采用要一个技巧来处理,也是常说的”事件委托” 事件没直接和li元素发生关系,而且绑定父元素了。...经常用于事件冒泡时处理事件委托 event.target代表当前触发事件的元素,可以通过当前元素对象的一系列属性来判断是不是我们想要的元素 <!...方法就可以调用到alert .trigger定义 根据绑定到匹配元素的给定的事件类型执行所有的处理程序和行为 trigger除了能够触发浏览器事件,同时还支持自定义事件,并且自定义时间还支持传递参数 $...如果它们不是由目标元素直接触发的,那么它就不会进行任何处理 与普通的方法返回 jQuery 对象(这样就能够使用链式用法)相反,.triggerHandler() 返回最后一个处理的事件的返回值。

    4.9K30

    事件高级

    该访法接收两个参数: ●e eventNameWithOn:事件类型字符串,比如onclick、onmouseover, 这里要带on ●callback: 事件处理函数,当目标触发事件时回调函数被调用...), 表示在事件冒泡阶段调用事件处理 程序。...事件对象的使用 事件触发发生时就会产生事件对象,并且系统会以实参的形式传给事件处理函数。 所以,在事件处理函数中声明1个形参用来接收事件对象。 ?...1.8 事件委托 事件冒泡本身的特性,会带来的坏处,也会带来的好处。 什么是事件委托 把事情委托给别人,代为处理。 事件委托也称为事件代理,在 jQuery 里面称为事件委派。...事件委托的原理 给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素。 事件委托的作用 我们只操作了一次 DOM ,提高了程序的性能。

    2.1K41

    JavaScript 事件委托 以及jQuery对事件委托的支持

    另外,如果在实际的应用中,很有可能同过js在 div1下动态生成p 元素,这时候,我们相应地还要添加事件处理函数,像这种动态添加的动作很有可能分散在我们 应用的很多个角落,这样动态添加处理函数将是一个非常蛋疼的事儿...解决方法: 利用 事件冒泡传递的机制,将本来本元素要完成的事件处理逻辑,委托给 父类节点,父类节点根据触发事件的节点信息,执行对应的事件处理逻辑。...jquery 对事件委托的支持 在jQuery里对事件委托的支持,有以下几个函数: ?...使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。...off() 方法移除用.on()绑定的事件处理程序。

    1.4K60

    事件高级

      btn.onclick = function() {}        特点: 注册事件的唯一性        同一个元素同一个事件只能设置一个处理函数,最 后注册的处理函数将会覆盖前面注册的处理函数...),表示在事件冒泡阶段调用事件处理 程序。   ...事件对象的使用 事件触发发生时就会产生事件对象,并且系统会以实参的形式传给事件处理函数。 所以,在事件处理函数中声明1个形参用来接收事件对象。...什么是事件委托 把事情委托给别人,代为处理。 事件委托也称为事件代理,在 jQuery 里面称为事件委派。 说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素的事件中执行。...事件委托的原理 给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素。 事件委托的作用 我们只操作了一次 DOM ,提高了程序的性能。

    1.8K10
    领券