• 事件冒泡:

什么是事件冒泡,就是最深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】12.3 在当前Activity中获取另一个Activity的返回值

    分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activ ...

  2. npm 的指令介绍

    npm install <name>安装nodejs的依赖包 例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本, ...

  3. ng-bind和{{}}插值法

    引言 今天调bug的时候遇到了一个问题,就是有的时候加载出来的数据没有数据的时候出现的是{{TeacherName}},一看这个不是我在页面上绑的值吗?怎么这样就显示出来了呢…… 针对这个问题,想起来 ...

  4. 解决PHP下载文件时因时文件太大而报404错误

    set_time_limit(0); ini_set('memory_limit', '512M'); header('Content-Type: application/octet-stream') ...

  5. strcat

    将两个char类型链接. char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s); 结果放在d中 prin ...

  6. RTX——第9章 任务运行在特权级或非特权级模式

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家讲解 RTX 运行模式的一个重要知识点,特权级模式和非特权级模式,有些资料或者书籍将非特权 ...

  7. c++多继承浅析

            图一                                                                                       图二 ...

  8. windows下好用的markdown编辑器

    Markdown是一种用来写作的轻量级[标记语言],它用简洁的语法代替了排版.字体设置,使我们可以专心写作,目前被越来越多的开发者,写作爱好者使用.Markdown的语法十分简单,常用的标记不超过十个 ...

  9. 混合编程:error LNK2001: unresolved external symbol

    Vs2006+matlab2010rb环境: 1:工具-选项-项目解决方案-VC++目录设置include和lib的路径 2:项目-属性-属性配置-链接器-输入-附加依赖项把库的名字添加进去 VIST ...

  10. pip国内源

    pip install -i https://pypi.douban.com/simple pyqrcode