【问题标题】:Pass custom data to a simulated javascript event将自定义数据传递给模拟的 javascript 事件
【发布时间】:2013-01-26 01:15:36
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript javascript-events


【解决方案1】:

只需将该数据添加到您的 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);

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

【讨论】:

  • 我不确定是否所有浏览器都支持鼠标事件中的自定义数据。
  • 是的,这就是我要找的东西,但我也对@mhaqs 点感到好奇。我不能使用我自己的自定义事件——它需要是一个“mousemove”事件。
  • 我对 IE 不太了解,因为我不是 Windows 用户,而且 IE 总是有不可预知的行为。但是,这不是关于在鼠标事件中支持自定义数据,它只是将动态属性添加到绝对被广泛支持的 javascript 对象(事件对象也不例外)。
  • 看看这里,stackoverflow.com/questions/9417121/…。将此标记为重复问题。
  • 不是重复的。 CustomEvent 具有自定义数据,请参阅:developer.mozilla.org/en-US/docs/DOM/Event/CustomEventany 参数。 OP 不想拥有CustomEvent,而是拥有自定义数据的MouseEvent。不一样。
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2010-12-24
  • 2014-09-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
相关资源
最近更新 更多