dispatchEvent无法正常工作

时间:2014-01-13 20:17:10

标签: javascript javascript-events

如演示所示,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.

我不知道问题出在哪里,因为我发现demo差不多有完全相同的代码,而且它正在运行,但不是我的。

2 个答案:

答案 0 :(得分:8)

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 :(得分:1)

这有效:

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);