使用自定义附加数据创建JavaScript事件

Alp*_*Alp 12 javascript event-handling javascript-events

是否有JavaScript方法将自定义数据传递给手动创建的JavaScript事件?

好吧,假设我有这个代码来创建和触发JavaScript事件:

var evObj = document.createEvent('HTMLEvents');
evObj.initEvent('submit', bubbling, cancelable);
anElement.dispatchEvent(evObj);
Run Code Online (Sandbox Code Playgroud)

这工作正常,可以使用此代码处理:

document.addEventListener('submit', mySubmitEventHandler, true);
Run Code Online (Sandbox Code Playgroud)

但是,我需要一种方法将其他数据传递给事件,以便mySubmitEventHandler知道事件是由用户触发还是由JavaScript事件创建,如上所示.布尔值就足够了.

那么,我怎样才能为新创建的东西添加"myEvent = true"之类的东西evObj呢?

请不要jQuery答案,我需要用纯JavaScript做这个.

Rob*_*b W 21

将参数附加到evObj.

evObj.flag = 'Hi!';
anElement.dispatchEvent(evObj);
Run Code Online (Sandbox Code Playgroud)

此代码演示了传递的事件对象dispatchEvent等于事件侦听器中的事件对象(实时演示):

var evObj = document.createEvent('HTMLEvents');
document.body.addEventListener('test', function(e){ alert(e === evObj); },true);
evObj.initEvent('test', true, true);
document.body.dispatchEvent(evObj); // Shows alert, "true"
Run Code Online (Sandbox Code Playgroud)

  • 很容易受伤!非常感谢 :) (2认同)
  • `Event.initEvent` 已折旧。请参阅:https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events (2认同)

wez*_*zzy 6

你的evObj它是一个普通的对象你可以添加任何数据作为对象的属性,如evObj.myData ="blablabla"; 然后读取监听器中的数据

希望这可以帮助