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


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] = [];
  }
  //解决重复问题:每一次自己在往自定义属性对应的容器中添加前,看一下是否已经存在,存在的话就不用重新的添加了,同理也不需要往事件池里面存储了
  var ary = curEle["mybind"+evenType];
  for(var i = 0;i<ary.length;i++){
    var cur = ary[i];
    if(cur.photo === evenFn){
      return;
    }
  }
  ary.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){
      ary.splice(i,1)//找到后 把自己存储的容器中对应的移除掉
      curEle.detachEvent("on"+evenType,ary[i]);//在把事件池中对应的也移除掉
      break;
    }
  }
  
}

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

Javascript 相关文章推荐
Javascript 中的类和闭包
Jan 08 Javascript
jQuery 三击事件实现代码
Sep 11 Javascript
jQuery实现的多选框多级联动插件
May 02 Javascript
jQuery实现checkbox全选的方法
Jun 10 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
Mar 31 Javascript
jquery树形菜单效果的简单实例
Jun 06 Javascript
微信小程序 JS动态修改样式的实现代码
Feb 10 Javascript
Node.js 8 中的 util.promisify的详解
Jun 12 Javascript
浅谈如何使用 webpack 优化资源
Oct 20 Javascript
webpack结合express实现自动刷新的方法
May 07 Javascript
深入理解 ES6中的 Reflect用法
Jul 18 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 Javascript
angular中实现li或者某个元素点击变色的两种方法
Jul 27 #Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
Jul 27 #Javascript
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 #Javascript
vue中计算属性(computed)、methods和watched之间的区别
Jul 27 #Javascript
angular2+node.js express打包部署的实战
Jul 27 #Javascript
利用Ionic2 + angular4实现一个地区选择组件
Jul 27 #Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 #jQuery
You might like
PHP读取MySQL数据代码
2008/06/05 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
python学习数据结构实例代码
2015/05/11 Python
Python对文件操作知识汇总
2016/05/15 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
pandas重新生成索引的方法
2018/11/06 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
Python logging模块handlers用法详解
2020/08/14 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
5.1手机促销活动
2014/01/17 职场文书
求职信模板怎么做
2014/01/26 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
运动会广播稿200字
2014/10/18 职场文书
烟台的海导游词
2015/02/02 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB