js学习总结之DOM2兼容处理this问题的解决方法


Posted in Javascript onJuly 27, 2017

针对上一篇提到的DOM2级存在的兼容问题,这里先说一下this的问题。

/*
 bind:处理DOM2级事件绑定的兼容性问题(绑定方法)
 @parameter:
  curEle->要绑定事件的元素
  evenType->要绑定的事件类型("click","mouseover")
  evenFn->要绑定的方法
*/
function bind(curEle,evenType,evenFn){
 if('addEventListener' in document){
  curEle.addEventListener(evenType,evenFn,false);
  return;
 }
 //给evenFn化妆 并且把化妆前的照片贴在自己对应的脑门上
 var tempFn = function(){
  evenFn.call(curEle)
 }
 tempFn.photo = evenFn;
 //首先判断自定义属性之前是否存在,不存在的话创建一个,由于要存储多个化妆后的结果,所以我们让其值是一个数组
 if(!curEle["mybind"+evenType]){//根据不同的事件类型是不同的数组
  curEle["mybind"+evenType] = [];
 }
 curEle["mybind"+evenType].push(tempFn);
 curEle.attachEvent("on"+evenType,tempFn);
 //这里的开始想法是改变this的指向,把this不指向window
 /*
  box.attachEvent("onclick",function(){
   fn1.call(box)
  })
  这样虽然解决了this的问题,但是又抛出了一个新的问题,不知道该如何删除了(我们不知道匿名函数是谁)
  var tempFn = function(){
   fn1.call(box)
  }
  box.attachEvent("onclick",tempFn);
  box.detachEvent("onclick",tempFn);
 */
}

function unbind(curEle,evenType,evenFn){
 if('removeEventListener' in document){
  curEle.removeEventListener(evenType,evenFn,false);
  return;
 }
 //拿evenFn到curEle["myBind"]这里找化妆后的结果,找到之后再事件池中把化妆后的结果移除事件池
 var ary = curEle['myBind'+evenType];
 for(var i = 0;i<ary.length;i++){
  if(ary[i].photo===evenFn){
   curEle.detachEvent("on"+evenType,ary[i]);
   break;
  }
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 新手学习常见问题解决方法
Apr 18 Javascript
jquery控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
jquery弹出关闭遮罩层实例
Aug 06 Javascript
控制文字内容的显示与隐藏示例
Jun 11 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
Apr 12 Javascript
巧用Javascript的逻辑运算符
Dec 02 Javascript
基于vue2.0实现简单轮播图
Nov 27 Javascript
基于javascript 显式转换与隐式转换(详解)
Dec 15 Javascript
利用CDN加速react webpack打包后的文件详解
Feb 22 Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 Javascript
Openlayers实现距离面积测量
Sep 28 Javascript
Angularjs的键盘事件的绑定
Jul 27 #Javascript
Angularjs 事件指令详细整理
Jul 27 #Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
Jul 27 #Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 #Javascript
angular中实现li或者某个元素点击变色的两种方法
Jul 27 #Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
Jul 27 #Javascript
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 #Javascript
You might like
我常用的几个类
2006/10/09 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php共享内存段示例分享
2014/01/20 PHP
PHP四大安全策略
2014/03/12 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
JS实现轮播图效果
2020/01/11 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python读取文件名称生成list的方法
2018/04/27 Python
python解析含有重复key的json方法
2019/01/22 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
python中四舍五入的正确打开方式
2021/01/18 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
加热夹克:RAVEAN
2018/10/19 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
如何写好建议书
2014/03/13 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
检讨书范文1000字
2015/01/28 职场文书
《七月的天山》教学反思
2016/02/19 职场文书