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 相关文章推荐
通过javascript把图片转化为字符画
Oct 24 Javascript
JavaScript限定图片显示大小的方法
Mar 11 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
javascript 数组的定义和数组的长度
Jun 07 Javascript
关于定制FileField中的上传文件名称问题
Aug 22 Javascript
js实现图片放大展示效果
Aug 30 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
Aug 09 Javascript
JavaScript模拟实现自由落体效果
Aug 28 Javascript
PHP读取远程txt文档到数组并实现遍历
Aug 25 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
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
Python 迭代器与生成器实例详解
2017/05/18 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python 字典的打印实现
2019/09/26 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Python包和模块的分发详细介绍
2020/06/19 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
秋季开学典礼主持词
2014/03/19 职场文书
同居协议书范本
2014/04/23 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis