首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将本机浏览器事件对象转换为jQuery事件对象

将本机浏览器事件对象转换为jQuery事件对象
EN

Stack Overflow用户
提问于 2012-03-01 07:33:26
回答 3查看 9.9K关注 0票数 24
代码语言:javascript
复制
document.getElementById('elmtid').onclick = function(event) { anotherFunction(event) };

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

因此,我的问题是,在我将本机浏览器事件对象传入anotherFunction()之后,如何将其转换为jQuery事件?我试过$(event),但它不起作用。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-01 08:15:42

因为文档在这方面有点含糊...(我在下面的1.7.1中查看)

jQuery.Event(event, props)

  • 创建一个新对象
  • 将其type属性设置为事件的type属性。
  • 通过对检查默认值是否为prevented.
  • sets的所有方法的规范化调用来设置isDefaultPrevented,以引用您传入的事件。H114添加由对象argument.
  • sets a timestamp.
  • marks对象提供的任意属性集。H220F221

你得到的基本上是一个新的对象,带有一些额外的属性和对原始事件的引用-除了isDefaultPrevented之外没有其他的规范化。

jQuery.event.fix(event)

  • 会忽略已经标记为可写副本(通过jQuery.Event())的对象,并规范化提到的here.

属性

预计到达时间:

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

票数 15
EN

Stack Overflow用户

发布于 2012-03-01 08:13:46

试试这个:

代码语言:javascript
复制
document.getElementById('elmtid').onclick = anotherFunction;

通过以下方式:

代码语言:javascript
复制
function anotherFunction(evt){
    evt = $.event.fix(evt || window.event);//Note need for cross-browser reference to the native event
    ...
}

http://jsfiddle.net/Wrzpb/

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9508377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档