dispatchEvent没有显示弹出窗口。

8
如演示所示,dispatchEvent未按预期工作。

http://jsfiddle.net/DerekL/V8uEN/

关键部分:

btn.dispatchEvent(
    document.createEvent("MouseEvent")
    .initMouseEvent("click", true, true, window, 0,
        0, 0, 0, 0,
        false, false, false, false,
        0, null)
);

页面加载后应该在1秒钟后弹出警告,但是它没有弹出,控制台出现了一个错误:

Uncaught InvalidStateError: Failed to execute 'dispatchEvent' on 'EventTarget': The event provided is null.

我不知道问题出在哪里,因为我找到了一个演示几乎完全相同的代码,它可以正常工作,但我的却不行。


对我有用。我在使用Chrome浏览器。 - T McKeown
@TMcKeown - 这很奇怪,我在Windows上使用Chrome 32,但它不起作用。 - Derek 朕會功夫
抱歉,它没有自动弹出。 - T McKeown
2个回答

11
btn.dispatchEvent(
    document.createEvent("MouseEvent")
    .initMouseEvent("click", true, true, window, 0,
        0, 0, 0, 0,
        false, false, false, false,
        0, null)
);

你的问题在于initMouseEvent没有返回任何内容。你不能将所有内容组合成一行。你需要将其拆分开来。

var mEvent = document.createEvent("MouseEvent");
mEvent.initMouseEvent("click", true, true, window, 0,
    0, 0, 0, 0,
    false, false, false, false,
    0, null);

btn.dispatchEvent(mEvent);
这是您链接的演示中的操作方法。

1
哦,我没有注意到那是问题所在……太习惯于使用jQuery了,没有意识到这不是原生JS的工作方式。 - Derek 朕會功夫

2

这个有效:

var btn = document.querySelector("button");
btn.addEventListener("click", function () {
   alert("Clicked.");
});

setTimeout(function () {
  var mEvent = document.createEvent("MouseEvent");
  mEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);

  btn.dispatchEvent(mEvent);
}, 1000);

是的,我意识到我不能将它们链接在一起。 - Derek 朕會功夫

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接