• 事件冒泡:

什么是事件冒泡,就是最深dom节点触发事件,然后逐级向最外层触发事件。打个比方一棵dom tree:li<ul<div每级都有事件绑定,然后我们触发li的事件,这时ul上的事件也会触发,接着div上的事件也会在ul事件触发之后执行。

demo:

    <div>
<ul id="ul">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<a href="http://www.baidu.com">我是连接</a>
</div>
$(function(){
$("li").click(function(event){
alert('我是li');
});
$("div").click(function(event){
alert("我是div");
});
$("a").click(function(event){
alert("我是a");
});
});

当点击li时,首先会alert出“我是li”,然后会alert出“我是div”;那么如何阻止div上的事件触发呢,可以使用event.stopPropagation()方法阻止事件冒泡~

$(function(){
$("li").click(function(event){
alert('我是li');
event.stopPropagation(); //阻止事件冒泡
});
$("div").click(function(event){
alert("我是div");
});
$("a").click(function(event){
alert("我是a");
});
});

当点击a时,会触发一个事件alert出“我是a”,随后跳转页面,那么如果我们只想触发事件不跳转页面呢,可以使用event.preventDefault()方法阻止默认事件~

这里有个最简单方式可以同时阻止冒泡又可以阻止默认事件,我们可以用return false。

总结:比较简单,总结了一下。(1)阻止事件冒泡:event.stopPropagation(2)阻止默认事件:event.preventDefault(3)return false均可阻止。

  • 事件委托:

js事件委托是由事件冒泡产生的,指定一个事件处理,就可以管理某一类的事件。

比如上面的如果每个li我们都要绑定一个触发事件呢,我们需要用一个循环来绑定事件

$(function(){
var
el_lis = document.getElementsByTagName('li');
for(var i in el_lis){
if(el_lis.hasOwnProperty(i)){
el_lis[i].addEventListener('click',function(){
alert('我是li');
})
}
}
});

我们知道多次与dom打交道会让一个页面的性能降低,如果出现很多li时,我们也要利用一个循环来绑定事件吗,为何不利用事件冒泡在外层去绑定一个事件呢~这就是事件委托。

我们将事件绑定在ul上:

$(function(){
var
el_ul = document.getElementsByTagName('ul');
el_ul[0].addEventListener('click',function(event){
alert('我是li');
})
});

那么如果我们让每一个li都有各自不同的触发事件呢,这时引入一个概念就是目标事件。

$(function(){
var
el_ul = document.getElementsByTagName('ul');
el_ul[0].addEventListener('click',function(event){
switch(event.target.textContent){
case "a":
alert("我是a");
break;
case "b":
alert("我是b");
break;
case "c":
alert("我是c");
break;
}
})
});

目标事件event.target指定了目标dom,这样根据dom的不同可以执行不同的函数。

总结:以上就是事件委托,事件委托可以在一定程度上优化页面的性能,避免了多次与dom打交道,减少dom操作,这就是委托的根本目的。

js事件总结的更多相关文章

  1. dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...

  2. 什么是JS事件冒泡?

    什么是JS事件冒泡?: 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理 程序或者事件返回true,那么 ...

  3. js事件技巧方法整合

    window.resizeTo(800,600); //js设置浏览器窗口尺寸 window.open (function(){ resizeTo(640,480);//设置浏览器窗口尺寸 moveT ...

  4. js事件浅析

    js中关于DOM的操作很多,因此js事件机制也就尤为重要. 事件绑定形式: 一. 内联形式 耦合度高,不利于维护 <button onclick="alert('你点击了这个按钮'); ...

  5. js 事件大全

    Js事件大全一般事件 事件 浏览器支持 描述onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClick IE4|N4|O 鼠标双击事件onMouseDo ...

  6. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  7. JS事件

    JS事件:  声明:为了事件对象event跨浏览器兼容: var oEvent==ev||event;      所以在下面用到 event 的地方都用 oEvent 代替  1)doucument的 ...

  8. 原生js事件和jquery事件的执行顺序问题

    场景:近日,写前端页面时候,在针对输入框input操作时,用到了jquery的插件,插件中使用了jquery的focus()和blur()方法.但是同时,又需要在插件之外再针对输入框的获取焦点和失去焦 ...

  9. 特殊js事件

    1:点击enter事件 $(document).keypress(function(e) { // 回车键事件 if(e.which == 13) { submitForm(); } }); 2:JQ ...

  10. js 事件

    事件:一般用于浏览器与用户操作进行交互 js事件的三种模型:内联模型.脚本模型.DOM2模型 内联模型:事件处理函数是HTML标签的属性 <input type="button&quo ...

随机推荐

  1. Android手机WiFi调试

    一.判断手机是否能被电脑所识别: 二.输入adb tcpip 8888 设置连接的端口为8888(可以设置为任意数字,默认为5555, 后面连接的时候若不想输入端口可将端口设置为5555.)如下图所示 ...

  2. ny737 石子合并(一) 总结合并石子问题

    描述: 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆. 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将n堆石子合并 ...

  3. 李洪强iOS之集成极光推送一iOS SDK概述

    李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...

  4. Eclipse+tomcat+axis2进行web service部署

    用Eclipse+axis2+tomcat进行web service部署 2016-12-07 目录  1 安装JDK  1.1 下载JDK  1.2 安装和配置JDK  1.3 验证2 安装Ecli ...

  5. linux命令--vi,vim

    进入vi的命令  vi filename :打开或新建文件,并将光标置于第一行首  vi +n filename :打开文件.并将光标置于第n行首  vi + filename :打开文件.并将光标置 ...

  6. 获取IP和mac地址

    1.获取IP static string GetLocalIp() { string hostname = Dns.GetHostName();//得到本机名 //IPHostEntry localh ...

  7. Kafka消息模拟器

    package clickstream import java.util.{Properties, Random, UUID} import kafka.producer.{KeyedMessage, ...

  8. jffs2根文件系统制作

    http://www.eetop.cn/blog/html/98/510998-20964.html 作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM公司授权ATC讲师. JFFS2是Flash上应用 ...

  9. Redis Key 过期策略

    redis 官方提供的 conf https://raw.github.com/antirez/redis/2.2/redis.conf 中6中过期策略的具体方式.redis 中的默认的过期策略是vo ...

  10. _STORAGE_WRITE_ERROR_

    :( _STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/User/788524be80db1959c132efbce25367a0.php 错误位置 ...