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 相关文章推荐
网页和浏览器兼容性问题汇总(draft1)
Jun 01 Javascript
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
script不刷新页面的联动前后代码
Sep 18 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
Jun 06 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
Feb 25 Javascript
jQuery对象的链式操作用法分析
May 10 Javascript
JS中传递参数的几种不同方法比较
Jan 20 Javascript
zTree树形菜单交互选项卡效果的实现方法
Dec 25 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 Javascript
JavaScript交换两个变量方法实例
Nov 25 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 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
一个基于PDO的数据库操作类
2011/03/24 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python简单实现操作Mysql数据库
2018/01/29 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
《苏珊的帽子》教学反思
2014/04/07 职场文书
工厂标语大全
2014/10/06 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
python如何正确使用yield
2021/05/21 Python
使用tensorflow 实现反向传播求导
2021/05/26 Python
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏