事件委托(event.target)

html部分

<div id="box">
    <p id="p1">p1</p>
    <p id="p2">p2</p>
    <p id="p3">p3</p>
</div>

传统的做法就是如下面一样,给每个p添加一个事件处理程序:

var p1 = document.getElementById(‘p1‘);
p1.onclick = function(){
        alert(‘p1‘);
};
var p2 = document.getElementById(‘p2‘);
p2.onclick = function(){
        alert(‘p2‘);
};
var p3 = document.getElementById(‘p3);
p3.onclick = function(){
        alert(‘p3‘);
};

这样添加单击事件是没有问题的,但是如果在一个复杂的页面里,对所有可单击的元素都采用这种方式的话,那将会有数不清的事件处理程序。而解决的方案是从事件的处理机制方面入手,在这里我们利用事件冒泡。

事件冒泡:事件开始时有具体的元素接收,然后逐级向上传播到较为不具体的元素。

这句话的意思是,当你点击一个元素的时候(假设这个元素有事件),这个元素的事件会触发,然后这个元素的父元素的事件接着触发。事件会沿着DOM树向上传播,直到document对象。

借助以上特性,我们没有必要给每个元素都添加一个事件处理程序,而是改成事件委托:

var box= document.getElementById(‘box‘);
box.onclick = function(event) {
    var id = event.target.id
    switch(id) {
        case ‘p1‘:
            alert(‘p1‘);
            break;
        case ‘p2‘:
            alert(‘p2‘);
            break;
        case ‘p3‘:
            alert(‘p3‘);
            break;
    }
}

当我们单击p1的时候,p1没有事件,但是单击事件还是会向上传播,从而触发box的单击事件,在事件中通过event.target具体得知单击的是哪个元素,然后获取id进行判断。

使用这种技术的优点:占用内存更少,程序所需时间更少,结构清晰。

  

时间: 2024-12-16 04:03:09

事件委托(event.target)的相关文章

javascript 事件委托 event delegation

事件委托 event delegation 一.概念: 假设我们有很多个子元素,每个元素被点击时都会触发相应事件,普通的做法是给每个子元素添加一个事件监听. 而,事件委托则是给它们的父元素添加一个事件监听器,子元素上没有任何事件监听.当子元素被点击时,这个点击事件冒泡到父元素上,然后父元素上绑定的事件监听来分析和处理这是哪个子元素被点击了. 二.例子1:一个ul及几个li: <ul id="parent-list" style="border:1px solid bla

JavaScript事件属性event.target和currentTarget 属性的区别。

event.target 获取的是触发事件的标签元素 event.currentTarget 获取到的是发起事件的标签元素 一.事件属性:event.target target事件委托的定义:本来该自己干的事,但是自己不干,交给别人来干 例子1 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title></title> 7 <

jquery事件之event.target用法详解

1. 定义和用法: 显示哪个 DOM 元素触发了事件: $("p, button, h1, h2").click(function(event){ $("div").html("Triggered by a " + event.target.nodeName + " element."); }); 定义和用法 target 属性规定哪个 DOM 元素触发了该事件. 语法 event.target参数 描述 event 必需.规

事件委托(event delegation)

事件委托给我带来的第一印象是,如果可以的话请尝试得经常使用它,性能好! 通过字符串拼接后,并进行DOM插入,不会复制事件,此时需要进行事件委托了!!! 优点 事件委托对于web应用程序的性能有如下几个优点: 1.需要管理的函数变少了 2.占用的内存少了 3.javascript代码和Dom结构之间的关联更少了 4.在改变DOM结构中的innerHTML时,不需要改动事件处理函数 使用方法: 1.给一组元素的父级添加事件(通过冒泡机制) oUl.onclick=function(){}; 2.寻找

事件委托(event delegation) 或叫 事件代理

比较好的介绍文章: 关于事件委托的整理 ,另附bind,live,delegate,on区别:https://www.cnblogs.com/MagicZhao123/p/5980957.html js中的事件委托或是事件代理详解:https://www.cnblogs.com/liugang-vip/p/5616484.html 使用委托的优点:原本需要给多个元素添加事件的现在只需要给他们的父元素添加事件,提高性能,提高可读性. 提示:使用事件委托时,如果注册到目标元素上的其他事件处理程序使用

JavaScript事件属性event.target

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #main { width: 200px; height: 100px; background: red; } </style> <script type="text/ja

JavaScript事件委托的技术原理

如今的JavaScript技术界里最火热的一项技术应该是‘事件委托(event delegation)’了.使用事件委托技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器是被添加到它们的父元素上.事件监听器会分析从子元素冒泡上来的事件,找到是哪个子元素的事件.基本概念非常简单,但仍有很多人不理解事件委托的工作原理.这里我将要解释事件委托是如何工作的,并提供几个纯JavaScript的基本事件委托的例子. 假定我们有一个UL元素,它有几个子元素: <ul id="parent-l

HTML 事件(三) 事件流与事件委托

本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4. HTML 事件(四) 模拟事件操作[未发布] 目录 1. 事件流 1.1 何为事件流 1.2 事件流的三个阶段 1.3 addEventListener()注册事件流的阶段 1.4 阻止事件流的传播 2. 事件委托 2.1 何为事件委托 2.2 ul.li场景示例 2.3 JQuery的事件委托

js的事件委托机制

如今的JavaScript技术界里最火热的一项技术应该是'事件委托(event delegation)'了.使用事件委托技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器是被添加到它们的父元素上.事件监听器会分析从子元素冒泡上来的事件,找到是哪个子元素的事件.基本概念非常简单,但仍有很多人不理解事件委托的工作原理.这里我将要解释事件委托是如何工作的,并提供几个纯JavaScript的基本事件委托的例子. 假定我们有一个UL元素,它有几个子元素: <ul id="parent-l

javascript事件委托,事件代理,元素绑定多个事件之练习篇

<ul id="parent-list"> <li id="post-1">item1</li> <li id="post-2">item2</li> <li id="post-3">item3</li> <li id="post-4">item4</li> <li id="post-