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 相关文章推荐
基于jquery的划词搜索实现(备忘)
Sep 14 Javascript
根据选择不同的下拉值出现相对应的文本输入框
Aug 01 Javascript
Javascript中的几种继承方式对比分析
Mar 22 Javascript
微信小程序 Image API实例详解
Sep 30 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
vue移动端项目缓存问题实践记录
Oct 29 Javascript
js实现json数组分组合并操作示例
Feb 12 Javascript
浅谈Javascript中的对象和继承
Apr 19 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
Apr 28 Javascript
JS+CSS实现过渡特效
Jan 02 Javascript
canvas实现贪食蛇的实践
Feb 15 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小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
Array对象方法参考
2006/10/03 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
Python使用进程Process模块管理资源
2020/03/05 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
Python实现代码块儿折叠
2020/04/15 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
高中自我鉴定
2013/12/20 职场文书
商务邀请函范文
2014/01/14 职场文书
转预备党员政审材料
2014/02/06 职场文书
教师师德反思材料
2014/02/15 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
建材投资建议书
2014/05/16 职场文书
卖车协议书范例
2014/09/16 职场文书
图解上海144收音机
2021/04/22 无线电
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
nginx内存池源码解析
2021/11/20 Servers
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers