JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题


Posted in Javascript onAugust 03, 2016

将 DOM 0级事件处理程序和DOM2级事件处理程序 IE事件处理程序封装为eventUtil对象,达到跨浏览器的效果。代码如下:

var eventUtil = {
// 添加事件句柄
addEventHandler: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;
}
},
// 删除事件句柄
removeEventHandler: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;
}
},
// 获取事件对象
getEvent:function (event) {
return event?event:window.event;
},
// 获取事件的类型
getType:function (event) {
return event.type;
},
// 获取事件对象目标
getTarget:function (event) {
if (event.target) {
return event.target;
}else{
return event.srcElement;
}
},
// 阻止事件冒泡
stopPropagation:function (event) {
if (event.stopPropagation) {
event.stopPropagation();
}else{
event.cancelBubble=true;
}
},
// 阻止事件默认行为
preventDefault:function (event) {
if (event.preventDefault) {
event.preventDefault();
}else{
event.returnValue=false;
}
}
}

在练习代码的时候,自己出现了几个错误的地方,导致运行出错,记录一下,加深记忆。

① 添加句柄是混淆参数的位置:首先是addEventHandler(element,type,handler)的参数分别表示,为哪个元素element添加事件,事件的类型type,事件处理函数handler。自己容易把handler和后面addEventLister(type,handler,false)中的false(表示冒泡阶段)的位置混淆。

导致结果:在写的过程,自己认真想了一下,理解了addEventHandler需要的哪些参数,就知道哪个位置该用哪个参数,最终写对了,未导致错误。

解决办法:理解并记住。

②在IE事件处理程序判断分支中,对attachEvent和detachEvent拼写错误,少了Event,只写了attach或detach。

导致结果:虽然没有报错,但是无法使用addEventHandler和removeEventHandler在IE中添加或删除事件。

解决办法:多练记牢就行。attachEvent 和 detachEvent。

③忘记了在IE事件处理程序attachEvent 和 detachEvent的参数里事件类型是需要加"on"的;写成了attachEvent(type,handler)。其实正确的应该是attachEvent("on"+type,handler),另外忘记了还有DOM0级事件处理的判断分支

导致结果:同样的,无法兼容IE事件处理。在IE上用封装的方法添加或删除事件不能成功。

解决办法:也只能记住。还有一点需要注意:DOM0级事件中element["on"+type]这种方式。比如element["on"+"click"]等价于element.onclick。

④最后一个属性的结尾也加逗号,比如在阻止事件默认行为 preventDefault:完成后加逗号,如下面代码片段(注释)

preventDefault:function (event) {
if (event.preventDefault) {
event.preventDefault();
}else{
event.returnValue=false;
}
},//最后一个属性preventDefault完成后加了逗号,会出错
}

导致结果:在IE中运行时报错(其中event.js的54行是最后逗号的下一行,实际上就是逗号导致的;test.html的第10行则是因为调用了event.js中的eventUtil.addEventHandler方法)

解决办法:毫无疑问,去掉最后的逗号即可。

⑤还是拼写错误,IE中阻止事件冒泡的属性cancelBubble,写多了一个s,写成了cancelBubbles。

导致结果:没有报错,但是无法阻止IE中的事件冒泡。

解决办法:改回来

以上所述是小编给大家介绍的JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS 页面自动加载函数(兼容多浏览器)
May 18 Javascript
javascript实现校验文件上传控件实例
Apr 20 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
Jun 21 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
Angular中实现树形结构视图实例代码
May 05 Javascript
JS 实现百度搜索功能
Feb 01 Javascript
vue使用nprogress实现进度条
Dec 09 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
Oct 31 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 Javascript
基于JavaScript实现随机点名器
Feb 25 Javascript
React 高阶组件HOC用法归纳
Jun 13 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 Javascript
AngularJS基础 ng-srcset 指令简单示例
Aug 03 #Javascript
js删除Array数组中指定元素的两种方法
Aug 03 #Javascript
AngularJS基础 ng-src 指令简单示例
Aug 03 #Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
Aug 03 #Javascript
AngularJS基础 ng-show 指令简单示例
Aug 03 #Javascript
JavaScript判断数组是否存在key的简单实例
Aug 03 #Javascript
AngularJS基础 ng-selected 指令简单示例
Aug 03 #Javascript
You might like
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
测试你的JS的掌握程度的代码
2009/12/09 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
python执行get提交的方法
2015/04/29 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Python银行系统实战源码
2019/10/25 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python里面search()和match()的区别
2016/09/21 面试题
构造方法和其他方法的区别
2016/04/26 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
环境工程专业个人求职信
2013/12/05 职场文书