我通过 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/