js学习总结之DOM2兼容处理this问题的解决方法

发布时间 - 2026-01-11 02:32:23    点击率:

针对上一篇提到的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;
  }
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # DOM2  # this  # JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后th  # js学习总结之DOM2兼容处理重复问题的解决方法  # js学习总结之DOM2兼容处理顺序问题的解决方法  # javascript 兼容所有浏览器的DOM扩展功能  # Dom操作之兼容技巧分享  # Dom与浏览器兼容性说明  # DOM Scripting中的图片切换[兼容Firefox]  # 前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)  # javascript firefox兼容ie的dom方法脚本  # javascript下有关dom以及xml节点访问兼容问题  # 绑定  # 是一个  # 多个  # 不存在  # 自定义  # 上一篇  # 创建一个  # 抛出  # 先说  # 知道该  # 让其  # 大家多多  # 移除  # 是否存在  # 池中  # 解决了  # gt  # evenType  # curEle  # parameter 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在 React 中条件性地遍历数组并渲染元素  如何注册花生壳免费域名并搭建个人网站?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  零服务器AI建站解决方案:快速部署与云端平台低成本实践  网站建设保证美观性,需要考虑的几点问题!  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Java垃圾回收器的方法和原理总结  Laravel如何实现一对一模型关联?(Eloquent示例)  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel如何创建自定义Artisan命令?(代码示例)  如何快速建站并高效导出源代码?  昵图网官网入口 昵图网素材平台官方入口  Laravel如何使用withoutEvents方法临时禁用模型事件  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  如何在Ubuntu系统下快速搭建WordPress个人网站?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何快速辨别茅台真假?关键步骤解析  如何在建站主机中优化服务器配置?  html如何与html链接_实现多个HTML页面互相链接【互相】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何用AWS免费套餐快速搭建高效网站?  音乐网站服务器如何优化API响应速度?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何在服务器上配置二级域名建站?  如何用已有域名快速搭建网站?  Python文件异常处理策略_健壮性说明【指导】  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何实现建站之星域名转发设置?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  如何在IIS中新建站点并配置端口与IP地址?  如何用PHP工具快速搭建高效网站?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  原生JS实现图片轮播切换效果  如何在Windows环境下新建FTP站点并设置权限?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何快速生成可下载的建站源码工具?  如何在宝塔面板创建新站点?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  JavaScript如何实现错误处理_try...catch如何捕获异常?  C++用Dijkstra(迪杰斯特拉)算法求最短路径