js事件总结
- 事件冒泡:
什么是事件冒泡,就是最深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事件总结的更多相关文章
- dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来
dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...
- 什么是JS事件冒泡?
什么是JS事件冒泡?: 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理 程序或者事件返回true,那么 ...
- js事件技巧方法整合
window.resizeTo(800,600); //js设置浏览器窗口尺寸 window.open (function(){ resizeTo(640,480);//设置浏览器窗口尺寸 moveT ...
- js事件浅析
js中关于DOM的操作很多,因此js事件机制也就尤为重要. 事件绑定形式: 一. 内联形式 耦合度高,不利于维护 <button onclick="alert('你点击了这个按钮'); ...
- js 事件大全
Js事件大全一般事件 事件 浏览器支持 描述onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClick IE4|N4|O 鼠标双击事件onMouseDo ...
- 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别
一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...
- JS事件
JS事件: 声明:为了事件对象event跨浏览器兼容: var oEvent==ev||event; 所以在下面用到 event 的地方都用 oEvent 代替 1)doucument的 ...
- 原生js事件和jquery事件的执行顺序问题
场景:近日,写前端页面时候,在针对输入框input操作时,用到了jquery的插件,插件中使用了jquery的focus()和blur()方法.但是同时,又需要在插件之外再针对输入框的获取焦点和失去焦 ...
- 特殊js事件
1:点击enter事件 $(document).keypress(function(e) { // 回车键事件 if(e.which == 13) { submitForm(); } }); 2:JQ ...
- js 事件
事件:一般用于浏览器与用户操作进行交互 js事件的三种模型:内联模型.脚本模型.DOM2模型 内联模型:事件处理函数是HTML标签的属性 <input type="button&quo ...
随机推荐
- Android手机WiFi调试
一.判断手机是否能被电脑所识别: 二.输入adb tcpip 8888 设置连接的端口为8888(可以设置为任意数字,默认为5555, 后面连接的时候若不想输入端口可将端口设置为5555.)如下图所示 ...
- ny737 石子合并(一) 总结合并石子问题
描述: 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆. 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将n堆石子合并 ...
- 李洪强iOS之集成极光推送一iOS SDK概述
李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...
- 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 ...
- linux命令--vi,vim
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件.并将光标置于第n行首 vi + filename :打开文件.并将光标置 ...
- 获取IP和mac地址
1.获取IP static string GetLocalIp() { string hostname = Dns.GetHostName();//得到本机名 //IPHostEntry localh ...
- Kafka消息模拟器
package clickstream import java.util.{Properties, Random, UUID} import kafka.producer.{KeyedMessage, ...
- jffs2根文件系统制作
http://www.eetop.cn/blog/html/98/510998-20964.html 作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM公司授权ATC讲师. JFFS2是Flash上应用 ...
- Redis Key 过期策略
redis 官方提供的 conf https://raw.github.com/antirez/redis/2.2/redis.conf 中6中过期策略的具体方式.redis 中的默认的过期策略是vo ...
- _STORAGE_WRITE_ERROR_
:( _STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/User/788524be80db1959c132efbce25367a0.php 错误位置 ...