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 相关文章推荐
utf8的编码算法 转载
Dec 27 Javascript
javascript引用对象的方法代码
Aug 13 Javascript
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
JQuery伸缩导航练习示例
Nov 13 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
Mar 25 Javascript
JavaScript数据结构之二叉树的查找算法示例
Apr 13 Javascript
JS实现简易的图片拖拽排序实例代码
Jun 09 Javascript
详解在Angular项目中添加插件ng-bootstrap
Jul 04 Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 Javascript
vue3.0 搭建项目总结(详细步骤)
May 20 Javascript
Vue微信公众号网页分享的示例代码
May 28 Javascript
javascript Number 与 Math对象的介绍
Nov 17 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
php smarty模版引擎中的缓存应用
2009/12/02 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
2013/06/25 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
JS实现小米轮播图
2020/09/21 Javascript
Python实现读取并保存文件的类
2017/05/11 Python
Python面向对象类的继承实例详解
2018/06/27 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python 遍历pd.Series的index和value
2019/11/26 Python
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
《九寨沟》教学反思
2014/04/08 职场文书
防汛通知
2015/04/25 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
环境卫生标语
2015/08/03 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Python if else条件语句形式详解
2022/03/24 Python