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 相关文章推荐
Jquery css函数用法(判断标签是否拥有某属性)
May 28 Javascript
js随机生成网页背景颜色的方法
Feb 26 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
JavaScript实现多个重叠层点击切换效果的方法
Apr 24 Javascript
javascript实现完美拖拽效果
May 06 Javascript
jQuery实现简洁的轮播图效果实例
Sep 07 Javascript
半个小时学json(json传递示例)
Dec 25 Javascript
移动端基础事件总结与应用
Jan 12 Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 Javascript
vue封装第三方插件并发布到npm的方法
Sep 25 Javascript
JavaScript缺少insertAfter解决方案
Jul 03 Javascript
微信小程序自定义modal弹窗组件的方法详解
Dec 20 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/22 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
PHP getName()函数讲解
2019/02/03 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
js实现弹窗效果
2020/08/09 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
浅析python递归函数和河内塔问题
2017/04/18 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
小学运动会入场式解说词
2014/02/18 职场文书
信息技术课后反思
2014/04/27 职场文书
欢迎横幅标语
2014/06/17 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
逃课检讨书范文
2015/05/06 职场文书
社区党建工作总结2015
2015/05/13 职场文书
百万英镑观后感
2015/06/09 职场文书
远程教育学习心得体会
2016/01/23 职场文书