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 相关文章推荐
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
Angular ng-class详解及实例代码
Sep 19 Javascript
浅谈js的ajax的异步和同步请求的问题
Oct 07 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
Nov 25 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
Sep 18 Javascript
从0到1搭建Element的后台框架的方法步骤
Apr 10 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
微信小程序8种数据通信的方式小结
Feb 03 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
咖啡的植物学知识
2021/03/03 咖啡文化
php基础教程 php内置函数实例教程
2012/08/21 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
讲解Python中的递归函数
2015/04/27 Python
python删除过期文件的方法
2015/05/29 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
大专应届生个人的自我评价
2013/11/21 职场文书
管理失职检讨书
2014/02/12 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
Python requests用法和django后台处理详解
2022/03/19 Python
Win10 Anaconda安装python-pcl
2022/04/29 Servers