《JS事件处理》
Event对象详细信息:http://www.w3school.com.cn/jsref/dom_obj_event.asp
JS原生支持3中绑定事件方式:
1.以标签属性形式
<div onclick="clicked(event)"></div>
本质上这种方式是直接执行引号当中的JS语句。
2.以DOMObject对象属性赋值方式
var div=document.getElementById("div");
div.onclick=function(e){...};
3.以事件侦听器方式:
div.addEventListener("click",function(e){...},bool);
默认false,代表冒泡。
一个完整的浏览器事件流:
window->document->html->body->bigDiv->div->[p]->div->bigDiv->...->window
注意,从window到p,再从p到window,中间目标元素p会触发两次。比如,给p加上true和false两个事件侦听器,那么点击p标签,console先后输出true的event和false的event。
标准的Event属性:
1.bubbles         返回布尔值,如果事件是起泡类型为true,否则为fasle(其值就是addEventListener时的第三个参数值)
2.cancelable      返回布尔值,如果preventDefault方法可以取消与事件关联的默认动作,则为true,否则为fasle
3.currentTarget   返回事件传播到的这个元素
4.eventPhase      返回事件传播的当前阶段,它的值是下面的三个常量之一(Event.CAPTURING_PHASE == 1,Event.AT_TARGET == 2,Event.BUBBLING_PHASE == 3),分别表示捕获、目标和起泡阶段
5.target          返回发生事件的元素
6.timeStamp       返回一个从网页被打开到触发该事件的毫秒数
7.type            返回这个事件的事件类型
误区解释:
target & currentTarget傻傻分不清?看下面例子就懂了:
<div id="one">
   <div id="three"></div>
</div>
one.addEventListener("click",function(e){
   console.log(e.target);         //three
   console.log(e.currentTarget);  //one
},false);
注释:点击three,在冒泡阶段,从three开始向window传播时经过了one,即传播到了one这个元素,one绑定了click事件,这时触发对应的事件处理函数,然后先后输出three和one。另外,这事件处理函数中,关键词this等价于currentTarget。
标准的Event方法:
preventDefault()           通知浏览器不要执行与事件关联的默认动作(如果该元素的e.cancelable==false,说明不存在默认动作或无法阻止该元素的默认动作,只要cancelable为假,该方法不起作用)
stopPropagation()          不再派发事件(可以在捕获、目标、冒泡各阶段使用来停止事件传播)
stopImmediatePropagation() 不再派发事件(可以在捕获、目标、冒泡各阶段使用来停止事件传播)
误区解释:
stopPropagation() & stopImmediatePropagation()傻傻分不清?看下面例子就懂了:
<div id = "div1">
    <button id = "button1"></button>
</div>
var div = document.getElementById("div1");
var btn = document.getElementById("button1");
div.addEventListener("click" ,function(){alert("第一次执行");} ,true);//1
div.addEventListener("click" ,function(){alert("第二次执行");} ,true);//2
btn.addEventListener("click" ,function(){alert("button 执行");});  
这两者区别仅仅发生在对一个元素的一个阶段(冒泡或捕获)绑定了多个事件处理函数时(多个事件处理函数顺序按照定义时的顺序),如上面,如果在//1这行的alert后加上stopImmediatePropagation()那么只会弹出一个对话框“第一次自行”,但是如果换成stopPropagation()会弹出“第一次执行”和“第二次执行”。
简单的说下return false:(极其不赞成使用,现在return false只会阻止默认行为,不会停止事件传播)
1.使用事件侦听器注册的事件处理函数里面使用该语句无任何效果,不能阻止默认行为
2.使用DOMObj=onclick=function(e){...}注册的事件处理函数,该语句能阻止默认行为
3.在标签里面使用onclick="fun(event)",然后fun函数里面写了该语句,无法阻止默认行为
4.在标签里面使用onclick="return fun(event)",然后fun函数里面写了该语句,能阻止默认行为
5.在标签里面使用onclick="return false",能阻止默认行为
也就是说,使用return false阻止默认行为只有两种情况:
1,在标签属性里面写return false,这就是上述4和5的情况
2,在DOMObj的事件处理函数里面写return false,这就是上述2的情况

关于JavaScript的事件处理一些知识的更多相关文章

  1. 20个优秀的 JavaScript 键盘事件处理库

    键盘事件是 Web 开发中最常用的事件之一,通过对键盘事件的捕获和处理可以提高网站的易用性和交互体验.下面,我们向大家介绍收集的20款优秀的 JavaScript 键盘事件处理库,帮助开发人员轻松处理 ...

  2. 《JavaScript》 程序基本知识 数据类型。 {0912上} {0912下}

    JS脚本语言: 这是JaxaScript的全称名 JS是网页里面使用的脚本语言 JS是一个非常强大的语言 JS的基础语法 注释语法:  单行注释 //     多行注释 /**/ 输出语法:   双标 ...

  3. 20个优秀的JavaScript 键盘事件处理库

    键盘事件是 Web 开发中最常用的事件之一,通过对键盘事件的捕获和处理可以提高网站的易用性和交互体验.下面,我们向大家介绍收集的20款优秀的 JavaScript 键盘事件处理库,帮助开发人员轻松处理 ...

  4. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

  5. 摘:JavaScript性能优化小知识总结

    原文地址:http://www.codeceo.com/article/javascript-performance-tips.html JavaScript的性能问题不容小觑,这就需要我们开发人员在 ...

  6. JavaScript性能优化小知识总结

    原文出处: YouYaInsist   欢迎分享原创到伯乐头条 前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对 ...

  7. JavaScript性能优化小知识总结(转)

    JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文非常详细的介绍了一下JavaScript性能优化方面的知识点,绝对是干货. 前言 一直在 ...

  8. JavaScript学习笔记(一):介绍JavaScript的一些简单知识

    JavaScript是世界上最流行的编程语言.这门语言可用于HTML和web,更可广泛用于服务器.PC.笔记本电脑和智能手机等设备.---------------------------------- ...

  9. JavaScript之事件处理详解

    一.事件传播机制 客户端JavaScript程序(就是浏览器啦)采用了异步事件驱动编程模型.当文档.浏览器.元素或与之相关的对象发生某些有趣的事情时,Web浏览器就会产生事件(event).如果Jav ...

随机推荐

  1. VN问题:error:请求的名称有效,但是找不到请求的类型的

    把url中的jmsjms-pc换成IP地址试试看 IP地址你用的是外网地址,应该用局域网内网地址,改成内网地址再试试看 还有练习架设SVN服务器初期尽量用http协议,不要上来就用https协议,ht ...

  2. 常用 Git 命令清单

    http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命 ...

  3. MySQL密码忘了怎么办?MySQL重置root密码方法

    本文主要介绍Windows和Linux系统下忘记密码重置root密码的方法,需要的朋友可以参考下. MySQL有时候忘记了root密码是一件伤感的事.这里提供Windows 和 Linux 下的密码重 ...

  4. eclipse导入项目之后报错

    一.项目本身就有错 二.jdk版本的问题 参考网址:http://jingyan.baidu.com/article/95c9d20da3ec5fec4e756186.html 从别的地方导入一个项目 ...

  5. 堡垒机之paramiko模块

    一.paramiko简单介绍 场景预设: 很多运维人员平时进行维护linux/unix主机时候,无非通过ssh到相应主机操作,那么一旦主机有成千上百台,那该如何应对,这时候我们需要批处理工具,基于py ...

  6. python3 第十六章 - 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被 ...

  7. python_递归_斐波那契

    什么是递归算法? -- 函数自己调用自己本身 -- 本质上return返回的时候,总是把一个参数传入到自己函数本身,让函数反复调用下去 递归有何特点? -- 必有一个结束条件 没有结束条件,递归就没有 ...

  8. c:if true、false都显示

    看了半天,最后发现jstl标签库没有引入! <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core ...

  9. Java中Unsafe类详解

    http://www.cnblogs.com/mickole/articles/3757278.html Java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操 ...

  10. java里程碑之泛型--泛型基本语法

    1,java7提供的泛型菱形语法 在java7之前,如果使用带泛型的接口和类定义变量初始化对象的时候,构造器后面也必须带上泛型,这有点恶心的.以前我在公司一直使用的java6,所以我也已经习惯了这种写 ...