事件(上)

什么是事件?

事件可以理解为用户的一些操作和浏览器形成的一个交互

如何绑定事件处理函数?

1.ele.onxxx = fucntion(){}

        #兼容性好,但是一个元素的同一个事件只能绑定一个处理程序

        #基本等同于写在HTML行间

2.ele.addEventListener(type,fn,flase)

IE9以下不兼容,可以为一个事件绑定多个处理程序

3.ele.attachEvent("on"+type,fn)

IE独有,同样可以为以一个事件绑定多个处理程序

例题

给每个li绑定一个事件,并输出他们的顺序

 

事件处理程序运行的环境

ele.onxxx = function(){}

程序this指向是dom元素本身

ele.addEventListener(type,fn,flase)

程序this指向是dom元素本身

ele.attachEvent("on"+type,fn)

程序this指向是Window

封装一个方法,来处理不同浏览器的兼容问题

  

我们能绑定事件,所以也可以解除事件

ele.onclick = false/null;

ele.removeEventListener(type,fn,false)

ele.detachEvent('on'+type,fn)

注意:如果绑定的是匿名函数则无法解除

这个解除函数中的function(){}是匿名函数,根本没法表示,所以必须把函数写到外面,留一个引用能找到它,例:

事件处理模型 ——事件冒泡、捕获

事件冒泡:结构上(非视觉上)嵌套关系的元素,会存在事件冒泡的功能,即同一事件,自子元素冒泡向父元素。(自底向上/自里向外)

事件捕获:结构上(非视觉上)嵌套关系的元素,会存在事件捕获的功能,即同一事件,自父元素捕获至子元素(事件源元素)。(自顶向下/自外向里)
怎么事件捕获?

把参数false变成true

注意:是代码结构上存在嵌套关系

先捕获后冒泡

怎么取消冒泡?

两个方法

W3C标准 event.stopPropagation();但不支持IE9以下版本

event.cancelBubble,IE独有(chrome现在也有这个方法)

如何封装一个取消冒泡的方法?

   function stopBubble(event) {if(event.stopPropagation){event.stopPropagation();}else{event.cancelBubble = true;}}

阻止默认事件

默认事件有哪种?

比如 表单提交,a标签跳转,右键菜单等

1.return false;以对象属性的方式注册的事件才有效ele.onxxx = fucntion(){}

 document.oncontextmenu = function(){ // 这个就是右键出菜单事件console.log('a');return false;}

2.event.preventDefault();W3C标准,IE9以下不兼容

3.event.returnValue = false;兼容IE

封装一个方法

  document.oncontextmenu = function(e){ //e是什么意思呢?console.log('a');cancelHandler(e);}function cancelHandler(event) {if(event.preventDefault) {event.preventDefault();}else{event.returnValue = false;}}
//e 的意思是,在每一个事件处理函数里面,我们可以写一个形参,系统会帮我们传一个事件对象,这个事件对象记载了事件发生时的一切数据,以供我们使用。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部