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

Ell*_* B. 24 javascript jquery internet-explorer

我通过本机浏览器onclick属性为元素分配一个事件处理函数:

document.getElementById('elmtid').onclick = function(event) { anotherFunction(event) };
Run Code Online (Sandbox Code Playgroud)

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

所以我的问题是,在我将本机浏览器事件对象传入之后anotherFunction(),如何将其转换为jQuery事件?我试过了$(event),但没办法.

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

Jim*_*iTh 15

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

jQuery.Event(event, props):

  • 创建一个新对象
  • 将其type属性设置为事件的type属性.
  • isDefaultPrevented通过标准化调用所有的方法来检查,如果是防止违约.
  • 设置originalEvent为引用您传入的事件.
  • 添加propsobject参数提供的任意属性集.
  • 设置时间戳.
  • 标记对象"固定".

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

jQuery.event.fix(event):

  • 忽略已标记为"已修复"的对象.
  • 制作可写副本(通过jQuery.Event())并规范化此处提到的属性.

ETA:

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


Bee*_*oot 6

试试这个:

document.getElementById('elmtid').onclick = anotherFunction;
Run Code Online (Sandbox Code Playgroud)

有:

function anotherFunction(evt){
    evt = $.event.fix(evt || window.event);//Note need for cross-browser reference to the native event
    ...
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Wrzpb/

  • 那很酷@Elliot.Bradshaw.最重要的是你得到了答案. (2认同)