为什么我的参数没有被传递到发送事件? [英] Why aren't my parameters getting passed through to a dispatched event?

查看:109
本文介绍了为什么我的参数没有被传递到发送事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

OK,所以我设置了一个这样的事件听者...

  window.addEventListener('message' parseMessage,false); 

var parseMessage = function(rawMessage){
console.log(rawMessage.cmd);
};

然后我触发了这样的事件:

  var event = new Event('message',{'cmd':blerg!}); 

window.dispatchEvent(event);

问题是解析消息中的console.log在我想要登录时注销未定义outblerg!



我在这里遇到什么事情,我怎么把'cmd'消息传递给事件?

解决方案


  1. 使用 自定义事件 c c c c >

    在details对象中指定您的数据(见代码)。


  2. 我更改了事件名称,因为 / code>也用于 postMessage API 。在Chrome中运行时不会出现问题,但我不会使用它。


 

  var parseMessage = function(rawMessage){
console.log(rawMessage);
console.log(rawMessage.detail.cmd);
};

//更改事件名称
window.addEventListener('myMessage',parseMessage,false);

//数据应该在'details'对象
var evt = new CustomEvent('myMessage',{
detail:{
'cmd': blerg!
}
});

window.dispatchEvent(evt);

这是IE> = 9兼容性的调整(使用 document.createEvent() CustomEvent :: initCustomEvent() ):

  var evt = document.createEvent(CustomEvent); 
evt.initCustomEvent('myMessage',false,false,{
'cmd':blerg!
});


Ok so I've set up an event listenr like this...

window.addEventListener('message', parseMessage, false);

var parseMessage = function(rawMessage) {
    console.log(rawMessage.cmd);
};

And then I'm triggering the event like this:

var event = new Event('message', {'cmd':"blerg!"});

window.dispatchEvent(event);

The problem is the console.log in parse message is logging out undefined when I am expecting to to log out "blerg!"

What I am I doing wrong here with the events, how to I pass the 'cmd' message through to the event?

解决方案

  1. Use CustomEvent instead of Event for creating custom events.

  2. Specify your data in a 'details' object (see code).

  3. I changed the event name because message is also used for the postMessage API. It didn't cause problems when running in Chrome, but I wouldn't use it.

 

var parseMessage = function(rawMessage) {
  console.log(rawMessage);
  console.log(rawMessage.detail.cmd);
};

// changed event name
window.addEventListener('myMessage', parseMessage, false);

// data should be in a 'details' object
var evt = new CustomEvent('myMessage', {
    detail: {
      'cmd' : "blerg!"
    }
});

window.dispatchEvent(evt);

Here is an adjustment for IE >= 9 compatiblity (using document.createEvent() and CustomEvent::initCustomEvent()):

var evt = document.createEvent("CustomEvent");
evt.initCustomEvent('myMessage', false, false, {
    'cmd': "blerg!"
});

这篇关于为什么我的参数没有被传递到发送事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆