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 相关文章推荐
newxtree.js代码
Mar 13 Javascript
用js生产批量批处理执行命令
Jul 28 Javascript
google 搜索框添加关键字实现代码
Apr 24 Javascript
js的alert样式如何更改如背景颜色
Jan 22 Javascript
Jquery 实现checkbox全选方法
Jan 28 Javascript
jQuery使用hide方法隐藏元素自身用法实例
Mar 30 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 Javascript
深入理解jquery自定义动画animate()
May 24 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
基于 Bootstrap Datetimepicker 联动
Aug 03 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 Javascript
详解CocosCreator项目结构机制
Apr 14 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
php给图片加文字水印
2015/07/31 PHP
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
在Python中使用第三方模块的教程
2015/04/27 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
Python 字符串换行的多种方式
2018/09/06 Python
Django的Modelforms用法简介
2019/07/27 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
python验证码图片处理(二值化)
2019/11/01 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
优秀广告词大全
2014/03/19 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
就业意向书范本
2015/05/11 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电