【问题标题】:How to I trigger a jQuery .on('click', selector, callback) event from JSDOM?如何从 JSDOM 触发 jQuery .on('click', selector, callback) 事件?
【发布时间】:2017-09-24 19:22:08
【问题描述】:

我有一段代码可以设置我的事件处理程序:

const element = $('#my-element');
const menuToggle = '.menu-toggle';
function assignEventHandlers() {
  element.on('click', menuToggle, handleMenuClicked);
}

在 JSDOM 中,我想触发 mocha 单元测试的单击事件。 我可以在 JSDOM 中选择元素.menu-toggle,但是如果我这样触发它,$('.menu-toggle').trigger('click'); 回调函数handleMenuClicked 不会被调用。

如何触发此事件?

【问题讨论】:

    标签: javascript jquery events jsdom


    【解决方案1】:

    您可以使用 DOM Api 并使用 dispatchEvent() 在外部调度事件

    在您的情况下,代码可能如下所示:

    var event = new MouseEvent('click', {
        'view': window,
        'bubbles': true,
        'cancelable': true
      });
    $('.menu-toggle')[0].dispatchEvent(event);
    

    我不确定 jQuery 是如何实现的,但我遇到过这个并看到它在 jsdom 上工作

    【讨论】:

    • 我已经尝试过了,但是当我用我的 jsdom 窗口变量替换 window 时,我收到一个错误,提示未定义 MouseEvent。有什么想法吗?
    • @cjh193 你的 jsdom 版本是多少?
    • jsdom 版本 11.2.0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多