javascript - 将 native 浏览器事件对象转换为 jQuery 事件对象

标签 javascript jquery internet-explorer

我通过 native 浏览器 onclick 属性将事件处理函数分配给元素:

document.getElementById('elmtid').onclick = function(event) { anotherFunction(event) };

当我在anotherFunction(event)时,我希望能够像使用 jQuery 通过 .on() 获得的事件对象一样使用事件对象。方法。我想这样做是因为 jQuery 事件对象具有属性和方法,例如 .pageX , .pageY.stopPropagation()适用于所有浏览器。

所以我的问题是,在我将 native 浏览器事件对象传递到anotherFunction()之后,如何将其变成 jQuery 事件?我试过$(event) ,但没有成功。

这里明显的问题是:为什么不直接使用 jQuery .on , .bind , .click等等来分配你的事件处理函数?答案:我正在构建一个页面,该页面有一个巨大的表格,上面有很多可点击的内容。不幸的是,这个项目要求页面必须在 IE6 和 IE7 中快速渲染。使用.on IE6 和 IE7 中的等人会造成 DOM 泄漏并很快耗尽内存(使用 Drip 自行测试: http://outofhanwell.com/ieleak/index.php?title=Main_Page )。通过 .onclick 设置 onclick 行为是我必须在 IE6 和 IE7 中快速渲染的唯一选项。

最佳答案

评论太长了...因为文档对此有点模糊...(我在下面查看 1.7.1)

jQuery.Event(事件, Prop ):

  • 创建一个新对象
  • 将其 type 属性设置为事件的 type 属性。
  • 通过对所有方法的规范化调用来设置 isDefaultPrevented,以检查默认值是否被阻止。
  • 设置 originalEvent 以引用您传入的事件。
  • 添加由 props 对象参数提供的任意属性集。
  • 设置时间戳。
  • 将对象标记为“已修复”。

您得到的基本上是一个带有一些附加属性和对原始事件的引用的新对象 - 除了 isDefaultPrevented 之外没有标准化。

jQuery.event.fix(事件):

  • 忽略已标记为“已修复”的对象。
  • 制作一个可写副本(通过jQuery.Event())并标准化提到的属性here .

预计到达时间:

实际上,仔细查看代码,jQuery.event.fix() 应该可以工作 - 按照@Beetroot-Beetroot 描述的方式。这就是 jQuery 在事件调度中创建 jQuery 事件对象所做的全部工作。

关于javascript - 将 native 浏览器事件对象转换为 jQuery 事件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508377/

相关文章:

javascript - D3 时间轴 - 为什么默认情况下刻度线似乎不可见?

javascript - 如何从文本区域获取输入的文本

javascript - IE 8 怪癖与标准检索 offsetHeight/offsetWidth

javascript - 在 IE 中,onbeforeunload 事件是为不卸载页面的链接而触发的

css - 在 IE 中对 css 生成的内容应用文本装饰

javascript - 如何在jquery中访问iframe dom元素

javascript - 附加到 html 页面脚本和 CSS 不起作用

javascript - JavaScript 自动分号插入(ASI)的规则是什么?

javascript - 在 IE7 中,如何在 jquery .click 事件期间使用 ajax 调用设置全局变量或元素值?

javascript - 简单图像幻灯片上的随机动画