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去掉空格的方法集合
Dec 28 Javascript
拉动滚动条加载数据的jquery代码
May 03 Javascript
jquery图片放大功能简单实现
Aug 01 Javascript
js history对象简单实现返回和前进
Oct 30 Javascript
js采用map取到id集合组并且实现点击一行选中一行
Dec 16 Javascript
JavaScript闭包实例讲解
Apr 22 Javascript
jquery text()方法取标签中的文本
Jul 25 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
Nov 18 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
基于Vue生产环境部署详解
Sep 15 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
Angular Material Icon使用详解
Nov 07 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
cache_lite试用
2007/02/14 PHP
PHP防注入安全代码
2008/04/09 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
CSS常用网站布局实例
2008/04/03 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
Vue组件化开发思考
2018/02/02 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
python绘制彩虹图
2019/12/16 Python
浅析python 字典嵌套
2020/09/29 Python
最新党员的自我评价分享
2013/11/04 职场文书
小区门卫岗位职责
2013/12/31 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
教师创先争优承诺书
2015/04/27 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
七一表彰大会简报
2015/07/20 职场文书
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python