跨浏览器事件处理
来源:互联网 发布:天元突破 知乎 编辑:程序博客网 时间:2024/05/22 04:34
在慕课网里,DOM事件一节中提到了怎么在Chrome,IE,和更低版本的浏览器中实现事件处理,这里做一个小结:
1.非IE浏览器支持addEventListener和removeEventListener。
2.IE浏览器(低版本)支持attachEvent和detachEvent,但其他浏览器不支持。
3.各个浏览器(无论低版本)都支持dom0级事件,但是有一个弊端就是无法重复处理。
这样我们要实现要给跨浏览器的处理,就需要用到句柄操作,这里以click为例,看一下代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>跨浏览器事件处理</title></head><body><button id="button">按钮</button><script> var btn=document.getElementById('button'); function show(){ alert("这是一个按钮"); } var eventUtil={ addHandler:function(element,type,handler){ if(element.addEventListener) { element.addEventListener(type,handler,false); }else if(element.attachEvent) { element.attachEvent('on'+type,handler); } else { element['on'+type]=handler; } } } eventUtil.addHandler(btn,'click',show);</script></body></html>
在变量eventUtil中封装了一个句柄addHandler,用来传递要实现的事件,需要的参数是element(元素),type(事件,这里是click操作),handler(响应函数)
之后进行一个if判断:
如果能执行addEventListener则直接执行,addEventListener的前两个参数是刚刚传进来的事件及其响应,最后一个false表示用事件冒泡;
如果不能执行上述,但能执行attachEvent,也就是IE,那么就调用attachEvent,注意参数中的type需要在前面加“on”,因为我们传递到句柄中是省略了on的,但是在attachEvent参数中on不可以省略,比如click要加为onclick;
最后一个兼容性的处理是直接element.onclick,这里用中括号代替点,也是为了配合on的添加。element."on"+type这种语法是错误的,所以用中括号代替。
用不同的浏览器点击一下按钮,均弹出来窗口。
同样地,我们可以添加一个删除句柄,这时候再点击按钮就没有反应了:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>跨浏览器事件处理</title></head><body><button id="button">按钮</button><script> var btn=document.getElementById('button'); function show(){ alert("这是一个按钮"); } var eventUtil={ addHandler:function(element,type,handler){ if(element.addEventListener) { element.addEventListener(type,handler,false); }else if(element.attachEvent) { element.attachEvent('on'+type,handler); } else { element['on'+type]=handler; } },removeHandler:function(element,type,handler){ if(element.removeEventListener) { element.removeEventListener(type,handler,false); }else if(element.detachEvent) { element.detachEvent('on'+type,handler); } else { element['on'+type]=null; } } } eventUtil.addHandler(btn,'click',show); eventUtil.removeHandler(btn,'click',show);</script></body></html>
1 0
- 跨浏览器处理事件
- 跨浏览器处理事件
- 跨浏览器事件处理
- javascript 跨浏览器事件处理
- JavaScript跨浏览器事件处理
- 跨浏览器事件处理 EventUtil
- Javascript跨浏览器事件处理
- 跨浏览器事件处理程序
- 跨浏览器兼容事件处理
- JavaScript跨浏览器事件处理
- 跨浏览器事件处理程序
- 跨浏览器的事件处理、事件对象
- 事件处理程序和跨浏览器的事件处理程序
- 跨浏览器实现自定义事件处理
- 跨浏览器添加javascript事件处理
- js跨浏览器事件处理程序
- 跨浏览器事件处理 封装EventUtil
- 跨浏览器的事件处理程序
- java内部类之私有内部类、局部内部类、匿名内部类
- C++(Qt)之尽可能延后定义式的出现时间
- 大家好,我是筱鹏,日后我将会在我的博客不定期更新IOS开发的自定实用小功能
- MapReduce工作机制
- 最全面的65条最常用正则表达式
- 跨浏览器事件处理
- Django url() 函数详解
- POJ-1860 Currency Exchange(Bellman-Ford)
- OSGI Equinox对于Http Service实现相关的jar
- 求大神帮我看下为啥我这我的这个程序会无休止运行下去
- mysql sql语句大全
- 处理window.close()在firefox中失效问题
- 标签、Id、Class权值谁先生效实验
- 运用hexo建立博客的几个坑