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 document.images实例
May 27 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
js查找某元素中的所有图片地址的方法
Jan 16 Javascript
Javascript检查图片大小不要让大图片撑破页面
Nov 04 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
Nov 26 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 Javascript
jquery.masonry瀑布流效果
May 25 jQuery
详解webpack介绍&amp;安装&amp;常用命令
Jun 29 Javascript
Canvas放置反弹效果随机图形(实例)
Aug 17 Javascript
详解layui中的树形关于取值传值问题
Jan 16 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
Mar 09 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与C#的值类型指向区别的详解
2013/05/21 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python-numpy-指数分布实例详解
2019/12/07 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
创业计划书之养殖业
2019/10/11 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server