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 相关文章推荐
js代码实现随机颜色的小方块
Jul 30 Javascript
浅析Javascript中bind()方法的使用与实现
May 30 Javascript
js只执行1次的函数示例
Jul 20 Javascript
JSON字符串和JSON对象相互转化实例详解
Jan 05 Javascript
设置cookie指定时间失效(实例代码)
May 28 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
Mar 03 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
微信小程序整合使用富文本编辑器的方法详解
Apr 25 Javascript
深入了解js原型模式
May 30 Javascript
解决layui使用layui-icon出现默认图标的问题
Sep 11 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
详解YII关联查询
2016/01/10 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
python检测某个变量是否有定义的方法
2015/05/20 Python
Python温度转换实例分析
2018/01/17 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Python reversed函数及使用方法解析
2020/03/17 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
八年级数学教学反思
2014/01/31 职场文书
迁户口计划生育证明
2014/10/19 职场文书
给领导的感谢信范文
2015/01/23 职场文书
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技