2010-10-12 50 views
0

说我有下面的代码:手动创建JavaScript事件对象

$('#someid').click(function(event) { myFunction(event); }); 

function myFunction(event) 
{ 
    // do something with event 
} 

而且我想用一个eval语句来测试myFunction(),没有做这样的事情使用eval('$("#someid").click()');

有没有办法在javascript中手动创建一个事件对象,这将与eval语句一起使用?

另外,如果myFunction仅用作事件处理程序,它可以始终假定event不为空?

回答

2

好吧,假设这是顶部的JQuery,事件对象不应该为空。

事件对象是IE和其他人之间完全不同的生物,所以除非JQ 100%规范化对象(我认为它从它的外观构建它自己的事件对象),但它的属性可能会有所不同,JQuery不会在浏览器之间使用。为了制造你自己的事件对象,我想我只需要使用一个for x in循环来查看里面的内容并构建一个模拟它的对象哈希。

因此,在这个页面是这样的:

$('#adzerk1').click(function(event){ 
    console.log('fakeEvent = {'); 
    for(x in event){ console.log(x + ':' + event[x] + ',\n')} 
    console.log('}'); 
}); 

$('#adzerk1').click(); 

将返回所有属性和它们的值在Firebug的控制台框事件。但是,您必须使其递归并测试才能获得事件属性的所有内部属性,而这些属性本身就是对象。否则,我已经设置好了,所以你只需要将结果剪切并粘贴到你的JS中,然后删除最后一个逗号,然后在关闭的大括号之前。

+0

有趣。所以基本上,在我的测试代码中使用.click()可能是设置适当事件对象的最佳方法。 – Alan 2010-10-12 14:41:54