【问题标题】:How to programmatically generate a window.event using Javascript?如何使用 Javascript 以编程方式生成 window.event?
【发布时间】:2009-10-23 05:07:24
【问题描述】:

我目前正在对一些 javascript 进行单元测试,它处理通过单击窗口中的某个项目引发的事件。以下是代码片段:

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 解决方案。

谢谢。

【问题讨论】:

  • 你能做$('#some-id').click()等吗?
  • @Alex:我也是 jQuery 新手。您介意解释一下 some-id 是什么吗?
  • 好的,我试过 $(#this').click() 和 $(#this.document).click()。没有工作...
  • 确保将#this 括在引号中 - 花一点时间查看 jquery 文档的“选择器”部分 (docs.jquery.com/Selectors)
  • "#some-id" 是一个 css 选择器,其中 some-id 是 html 标签上的 id 属性

标签: javascript jquery unit-testing


【解决方案1】:

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

http://docs.jquery.com/Events

使用 jQuery,您只需执行类似的操作

$(window).trigger("eventname")

【讨论】:

  • 不知道为什么这被赞成了,但这完全是题外话。
【解决方案2】:

我目前写了a blog post series 关于jQuery 中的自定义事件。你可以使用.trigger.bind,它真的很强大。

【讨论】:

    【解决方案3】:

    正如 alex 在他的评论中指出的那样,您可以使用 jQuery 来创建事件

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

    因此,按照您的示例,如果您想在单击标签时调用 someFunction,您可以这样做:

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

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

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

    这样就可以了。

    EDIT 对于窗口事件,您可以使用

    $(window).click(someFunction);
    

    这会将在窗口中完成的任何点击绑定到someFunction。如果您调用$(window).click();,则会模拟点击事件,调用someFunction

    【讨论】:

    • @MaKLaV_eS:如果我只想创建一个窗口事件怎么办?据我所知,为了触发一个事件,我需要做的就是在浏览器中单击某处,它会触发一个事件。我想捕捉那个事件,这样我至少可以在我的 javascript 中测试后一种情况。
    • @MaKLaV_eS:感谢您的更新。我已经尝试过您的代码,并且还遵循了 docs.jquery.com/Events/click 中的示例,但它仍然无法正常工作。看起来问题与 JsTestDriver 本身有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多