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的replace方法详细介绍
Nov 09 Javascript
JS实现字体选色板实例代码
Nov 20 Javascript
jquery的clone方法应用于textarea和select的bug修复
Jun 26 Javascript
jquery简单的弹出层浮动层代码
Apr 27 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
js过滤HTML标签完整实例
Nov 26 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
vue2.0 + element UI 中 el-table 数据导出Excel的方法
Mar 02 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
Aug 04 Javascript
vue遍历对象中的数组取值示例
Nov 07 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实现的简单日志写入函数
2015/03/31 PHP
PHP中list方法用法示例
2016/12/01 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
js笔试题-接收get请求参数
2019/06/15 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
python处理csv数据的方法
2015/03/11 Python
Python的函数的一些高阶特性
2015/04/27 Python
Python中super的用法实例
2015/05/28 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Python 列表反转显示的四种方法
2020/11/16 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
创伤外科专业推荐信范文
2013/11/19 职场文书
初中地理教学反思
2014/01/11 职场文书
2014年质检员工作总结
2014/11/18 职场文书
工程部文员岗位职责
2015/02/04 职场文书
学校实习推荐信
2015/03/27 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
Go遍历struct,map,slice的实现
2021/06/13 Golang