如何使用attachEvent引用调用者对象(“t​​his”)

2024-03-21

使用方法.attachEvent()在 IE 中,如何引用调用者对象(触发事件的元素)this? In normal浏览器,使用.addEventListener, 变量this指向元素,而在 IE 中它指向window object.

我需要它与以下代码一起使用:

var element = //the element, doesn't matter how it is obtained
element.addAnEvent = function(name, funct){
   if(element.addEventListener) // Works in NORMAL browsers...
   else if(element.attachEvent){
     element.attachEvent("on"+name, funct);
     //where the value of "this" in funct should point to "element"
   }
}

我刚刚编写了该代码,但不是exactly与我的代码相同,但如果它适用于它,那么它也适用于我!


From 这篇怪异模式文章 http://www.quirksmode.org/js/events_advanced.html#link6关于attachEvent:

  1. 事件总是冒泡,没有捕获的可能性。
  2. 事件处理函数是引用的,不是复制的,所以 this 关键字总是指窗口并且完全没有用.

这两个弱点的结果是,当事件冒泡时,不可能知道当前哪个 HTML 元素处理该事件。我在事件顺序页面上更全面地解释了这个问题。

由于 Microsoft 事件添加模型仅受 Windows 上的 Explorer 5 及更高版本支持,因此它不能用于跨浏览器脚本。但即使对于仅在 Windows 上使用资源管理器的应用程序,也最好不要使用它,因为在复杂的应用程序中,冒泡问题可能非常严重。

我还没有测试过它,但一个可能的解决方法可能是将处理程序包装在一个匿名函数中,该函数通过调用您的处理程序funct.call().

else if(element.attachEvent){
   element.attachEvent("on"+name, function(){ funct.call( element ) });
}

对于未经测试的解决方案,我深表歉意。我不喜欢这样做,但现在无法轻松访问 IE。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用attachEvent引用调用者对象(“t​​his”) 的相关文章

随机推荐

  • 带有附件/MIME 内容的 SOAP

    需要从第三方发送和接收以下格式的 SOAP 消息 POST api HTTP 1 1 Host mytesthost com Content Type multipart related boundary aMIMEBoundary typ
  • 当我使用 Perl 执行 Python 脚本时,为什么没有出现任何语法错误?

    我刚刚写了一些测试Python代码到test py 我将按如下方式启动它 perl test py 过了一会儿我意识到自己的错误 我说 过了一会儿 因为 Python 代码实际上被正确执行 就像在 Python 解释器中一样 为什么我的 P
  • okhttp 应用级 OkHttpClient 实例

    我想知道如果我创建一个 OkHttpClient 实例来为我的 整个 Android 应用程序 提供服务 是否会出现任何性能瓶颈或问题 即在我的 Application 类中 我创建一个静态公共变量 它将包含 OkHttpClient 的实
  • 如何检查 List 元素是否包含具有特定属性值的项目

    public class PricePublicModel public PricePublicModel public int PriceGroupID get set public double Size get set public
  • 如何解决垂直 RecyclerView 内水平 ViewPager2 和 RecyclerView 的滚动问题?

    我有一个 RecyclerView 比如说 rootRecyclerView 根据某些 API 响应 可以有不同类型的行 我实现了其中一个是水平的ViewPager2另一种是水平实现的RecyclerView say childRecycl
  • PHP 5 - 跨包含文件的变量范围没有类或函数

    我已经阅读了很多很多关于此的主题 但仍然无法理解它 这是我的基本问题 header php包括一个名为navigation php 之内navigation php previous and next被定义 使用 echo 语句我已经验证它
  • 将长元组拆分为较小的元组

    我有一个长元组像 2 2 10 10 344 344 45 43 2 2 10 10 12 8 2 10 我试图将它分成元组的元组 例如 2 2 10 10 344 344 45 43 2 2 10 10 12 8 2 10 我是 pyth
  • Angular 4 - 如何为 ngFor 循环内的标签拥有唯一的 id 值?

    我遇到了一个问题 我需要为我的数据行中的每个数据行提供一个唯一的 id 值 ngFor角度 4 中的循环 我的代码是这样的 div div row myValue div div 假设你的对象中有一个唯一的 id 值 那么你可以这样做 di
  • R data.table 是否记录为通过引用作为参数传递?

    检查这个玩具代码 gt x lt data table a 1 2 gt foo lt function z z b 3 4 gt y lt foo x gt x a b 1 1 3 2 2 4 看来 data table 是通过引用传递的
  • 如何抑制 webdriver-manager 日志

    我正在使用 webdrivermanager 来管理项目中的驱动程序 但在更新到最新版本 2 2 1 后 我的项目中充满了 webdrivermanger 日志 这些日志在日志中搜索我自己的内容时造成了麻烦 我怎样才能停止 抑制这些日志 通
  • 钻石问题真的能解决吗?

    面向对象编程中的一个典型问题是菱形问题 我有父类 A 和两个子类 B 和 C A 有一个抽象方法 B 和 C 实现它 现在我有一个子类D 它继承了BandC 现在的钻石问题是 D应该使用什么实现 B的实现还是C的实现 人们声称 Java 不
  • AJAX post JSON 数据到达为空

    这是我的 AJAX 请求 data JSON stringify data url base url index php home make order alert url var request ajax url url type POS
  • 如何将 python 添加到 Windows 中的 cmd [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我安装了 python 3 1 并且也将其添加到系统路径中 现在我可以打开 cmd 并输入 python 来启动 python 但是每当我
  • 像树一样渲染嵌套列表

    我如何使垂直边框停在最后一个元素处 它只能与 CSS3 现代浏览器兼容 但需要在各种背景下工作 即透明 http jsfiddle net ShgD6 http jsfiddle net ShgD6 由此 To this 我通过修改这个小提
  • 如何在猫头鹰旋转木马的角度中制定指令?

    你能告诉我如何在 Angular js 中制作指令吗 我需要在 js 中使用 owl carousel 插件 就像我在 jqm fiddle 中所做的那样http jsfiddle net ezanker o9foej5L 1 http j
  • Vuetify 离线文档

    我已经开始使用 Vuetify 添加 ui 组件并使用预定义的布局 问题是我必须时不时地查看在线文档 并且要求我永远连接到互联网 有没有办法获取 Vuetify 的离线文档 就像使用 doxygen javadocs 构建的 html 或
  • 如何使用 Scala 的 DataFrame 比较表中的每一列

    有两张桌子 一张是ID表1 一张是属性表2 Table 1 Table 2 如果表1中同一行的ID具有相同的属性 则得到数字1 否则得到0 最终得到结果表3 Table 3 例如 id1和id2具有不同的颜色和大小 因此id1和id2行 表
  • 如何在jQuery中选择所有本地链接

    我需要选择所有本地链接 无论是否以 path to page http mydomain com path to page https mydomain com path to page 并将它们替换为 path to page 感谢您的帮
  • 在仅附加表中设置版本列

    我们有一个表来存储记录的版本 这些列是 Id Guid VersionNumber int Title nvarchar Description nvarchar etc 保存项目将在表中插入具有相同 ID 和增量版本号的新行 我不确定如何
  • 如何使用attachEvent引用调用者对象(“t​​his”)

    使用方法 attachEvent 在 IE 中 如何引用调用者对象 触发事件的元素 this In normal浏览器 使用 addEventListener 变量this指向元素 而在 IE 中它指向window object 我需要它与