2009-10-23 72 views
2

我目前正在单元测试一些JavaScript,它通过点击窗口中的某个项目来处理引发的事件。下面是代码的snipet:如何以编程方式使用Javascript生成window.event?

function someFunction() 
{ 

    var evt = window.event ? window.event : event; 

    if (evt == null) { return; } 

    var nodeElement = evt.srcElement; 

    if (nodeElement == null) { return; } 
    . 
    . 
    . 
} 

我目前的做法是试图创建在我的测试文件的自定义事件,这将填充window.event所以我至少可以得到测试nodeElement == NULL部分。但我这样做很困难(不是来自Javascript背景)。我如何实际创建自定义事件(在IE中)?我目前正在使用JsTestDriver进行单元测试,因此没有使用html文件。我不介意使用jQuery或简单的Javascript解决方案。

谢谢。

+0

你可以做'$('#some-id')。click()'etc? – alex 2009-10-23 05:14:07

+0

@Alex:我也是jQuery的新手。你介意解释什么是某个ID吗? – BeraCim 2009-10-23 05:17:48

+0

好吧我试过$(#this')。click()和$(#this.document).click()。没有工作... – BeraCim 2009-10-23 05:32:41

回答

0

我当前写了关于jQuery中自定义事件的a blog post series。您可以使用.trigger.bind,它非常强大。

3

我肯定会使用jQuery(或其他一些框架)。它会让你的生活更轻松。我确信每个浏览器都有不同的触发事件的方式。

http://docs.jquery.com/Events

使用jQuery你只是像做

$(window).trigger("eventname") 
+0

不知道为什么这已被upvoted,但它是完全脱离主题。 – hayavuk 2014-02-03 08:38:15

0

亚历克斯指出在他的评论,你可以使用jQuery与

$("css selector here").jQueryEventFunction(functionToCall); 

因此,创建事件,以下你的例子,如果你想在点击标签时调用someFunction,你可以这样做:

$("#label-id").click(someFunction); 

现在,如果你想模拟点击它

$("#label-id").click(); 

这将做到这一点。

编辑对于窗口事件,你可以使用

$(window).click(someFunction); 

将结合在窗口做任何someFunction点击。如果您拨打$(window).click();,则会模拟点击事件,呼叫someFunction

+0

@MaKLaV_eS:如果我只是想创建一个窗口事件?据我所知,为了触发一个事件,我所需要做的就是在某个地方点击浏览器,它会触发一个事件。我想捕捉这个事件,所以我至少可以在我的javascript中测试后者的条件。 – BeraCim 2009-10-25 23:36:57

+0

查看编辑答案。希望这是你想要的。 – 2009-10-26 08:22:43

+0

@MaKLaV_eS:感谢您的更新。我试过了你的代码,并且也遵循了http://docs.jquery.com/Events/click中的例子,但它仍然不起作用。看起来问题与JsTestDriver本身有关。 – BeraCim 2009-10-26 23:18:19