将自定义数据传递给模拟 JavaScript 事件

Jus*_*zer 2 javascript dom-events

我希望能够将自定义数据传递给模拟的 JavaScript 事件,以便我可以在事件侦听器回调中唯一标识该模拟事件。例如,如果我打电话:

var event = document.createEvent("MouseEvents");
var args = ['mousemove', true, true, window, 1, 0, 0];
event.initMouseEvent.apply(event, args);
target.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

我如何能够将数据传递给此事件,然后从事件侦听器回调中检索它?

ZER*_*ER0 5

只需将该数据添加到您的event对象就足够了:

target.addEventListener("mousemove", function(e) {
    console.log(e.data);
}, false);

var event = document.createEvent("MouseEvents");
var args = ['mousemove', true, true, window, 1, 0, 0];
event.data = "foobar";
event.initMouseEvent.apply(event, args);
target.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

PS 请注意,在某些浏览器中这些参数是不够的,所有这些参数都是必需的,否则会引发异常。我不确定您想要支持哪些浏览器。有关所有参数,请参阅:https://developer.mozilla.org/en/docs/DOM/event.initMouseEvent

  • 这不是重复的。`CustomEvent` 具有自定义数据,请参阅:https://developer.mozilla.org/en-US/docs/DOM/Event/CustomEvent,`any` 参数。OP 不希望有一个“CustomEvent”,而是一个带有自定义数据的“MouseEvent”。这不一样。 (3认同)