我通过本机浏览器onclick属性为元素分配一个事件处理函数:
document.getElementById('elmtid').onclick = function(event) { anotherFunction(event) };
当我在anotherFunction(event)
时,我希望能够像使用jQuery中通过.on()
方法获得的事件对象一样使用事件对象。我想这样做是因为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中快速呈现的唯一选项。
答案 0 :(得分:15)
评论太长了......因为文档对此有点模糊......(我在下面看1.7.1)
jQuery.Event(event, props)
:
type
属性设置为事件的type
属性。isDefaultPrevented
,以检查是否阻止默认值。originalEvent
以引用您传入的事件。props
对象参数提供的任意属性集。你得到的基本上是一个新对象,它有一些额外的属性和对原始事件的引用 - 除了isDefaultPrevented
之外没有规范化。
jQuery.event.fix(event)
:
jQuery.Event()
)并规范化here提到的属性。<强> ETA:强>
实际上,仔细观察代码,jQuery.event.fix()
应该有效 - 就像@ Beetroot-Beetroot所描述的那样。这就是jQuery在事件调度中创建jQuery事件对象所做的一切。
答案 1 :(得分:10)
你想要jQuery.event.fix
。
new jQuery.Event(nativeEvent)
nativeEvent
as the originalEvent
property. 此时请注意,该事件没有任何“eventy”属性,只有originalEvent
,timeStamp
以及冒泡/默认防止功能。
jQuery.event.fix(nativeEvent)
nativeEvent
, plus specific ones from the fix hook target
and metaKey
properties 答案 2 :(得分:6)
试试这个:
document.getElementById('elmtid').onclick = anotherFunction;
with:
function anotherFunction(evt){
evt = $.event.fix(evt || window.event);//Note need for cross-browser reference to the native event
...
}