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 相关文章推荐
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
javascript两段代码,两个小技巧
Feb 04 Javascript
推荐10个超棒的jQuery工具提示插件
Oct 11 Javascript
jQuery中:reset选择器用法实例
Jan 04 Javascript
jquery ajax分页插件的简单实现
Jan 27 Javascript
JavaScript 继承详解(六)
Oct 11 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 Javascript
layui数据表格跨行自动合并的例子
Sep 02 Javascript
vue 动态添加class,三个以上的条件做判断方式
Nov 02 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调用三种数据库的方法(3)
2006/10/09 PHP
linux iconv方法的使用
2011/10/01 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
农民工创业典型事迹
2014/01/25 职场文书
《泉水》教学反思
2014/04/11 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
车辆年检委托书范本
2014/10/14 职场文书
谢师宴学生致辞
2015/07/27 职场文书
《花钟》教学反思
2016/02/17 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
Java Socket实现多人聊天系统
2021/07/15 Java/Android
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers