dispatchEvent не работает


Как показано в демо, 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.

Я не знаю, в чем проблема, так как я нашел демо почти с тем же кодом, и он работает, но не мой.

2 6

2 ответа:

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

Вот как это делается в демо, на которое вы ссылаетесь.

Это работает:

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