• 事件冒泡:

什么是事件冒泡,就是最深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. 怎样用modelsim做后仿真

    摘要: 怎样用modelsim做后仿(编译工具采用quatus) step1:在qurtus改变编译选项:     assignments->EDA tool setting:选择verilog ...

  2. Swift语言 简明基础 代码演示样例

    开发环境: Mac.Xcode6.0 下面内容均可创建ios common line项目来測试 1.Hello World演示样例 使用xcode创建新的common line项目,查看主文件main ...

  3. C# 获取指定目录下所有文件信息

    /// <summary> /// 返回指定目录下所有文件信息 /// </summary> /// <param name="strDirectory&quo ...

  4. 对JAVASCRIPT匿名函数的理解

    网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点 Query片段: (function(){ //这里忽略jQuery所有实现 })(); 要说匿名函数,我们首先要由函数本身说起. ...

  5. java多线程13 : 死锁

    前言 死锁单独写一篇文章是因为这是一个很严重的.必须要引起重视的问题.这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只 ...

  6. Celery+python+redis异步执行定时任务

    我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...

  7. FreeRTOS 低功耗之停机模式

    以下转载自安富莱电子: http://forum.armfly.com/forum.php STM32F103 如何进入停机模式在 FreeRTOS 系统中,让 STM32 进入停机模式比较容易,调用 ...

  8. Linu 修改maven的setting保护文件

    查找目录 find / -name .m2 -d 查看文件: cat settings.xml 修改文件 vi settings.xml 修改后发现保存会出问题,报错W10: Warning: Cha ...

  9. 【JS】通过JS实现超市小票打印功能——ActiveX控件

    应客户的需求= = ,要在网页端实现打印小票的功能 先来一张打印出的小票效果图(合计明显不对,因为有修改订单功能,请各位忽略) 用什么方法实现呢: 我想应该是有三种吧 1.用第三方的浏览器控件(这个好 ...

  10. guava处理字符串与List之间,字符串与map之间的转换<转>

    import static org.junit.Assert.*; import java.util.List; import java.util.Map; import org.junit.Test ...