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做的简单的可折叠的两级树形菜单
Sep 21 Javascript
EasyUI中datagrid在ie下reload失败解决方案
Mar 09 Javascript
简介JavaScript中toUpperCase()方法的使用
Jun 06 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
Aug 21 Javascript
jquery 获取select数组与name数组长度的实现代码
Jun 20 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
May 22 Javascript
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
vue 自定义指令自动获取文本框焦点的方法
Aug 25 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 jQuery
Element Breadcrumb 面包屑的使用方法
Jul 26 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
PHP排序算法的复习和总结
2012/02/15 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python中map的基本用法示例
2018/09/10 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
Python简易版图书管理系统
2019/08/12 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
python如何获取apk的packagename和activity
2020/01/10 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
网络方面基础面试题
2012/11/16 面试题
港湾网络笔试题
2014/04/19 面试题
煤矿安全生产标语
2014/06/06 职场文书
国际贸易系求职信
2014/08/09 职场文书
个人四风对照检查材料
2014/09/26 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
交通事故被告答辩状
2015/05/22 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
Django框架中视图的用法
2022/06/10 Python