我有一个由某个函数触发的自定义事件。
此事件包含一个包含详细信息的eventArgs,等等。我希望处理程序/侦听器能够更改eventArgs,以便原始函数获得其更改的值。这有可能吗?
到目前为止,我已经尝试过了:
Handler/Listener
document.addEventListener('myCustomEvent', function(eventArgs)
{
eventArgs.detail.value = newValue; // I want the listener to change the value in "e"
});Caller
var eventArgs = {
detail:
{
value: originalValue;
},
bubbles: false, //not sure what this does
cancelable: false, //not sure what this does
};
document.dispatchEvent(new CustomEvent('myCustomEvent', eventArgs ));
//do things here with a changed eventArgs after the event is fired侦听器中所做的更改没有到达调用方。我还试图在eventArgs.detail中添加复杂对象,但在这种情况下,处理程序将获得一个空eventArgs。
这是不可能的,还是我错过了什么?
重要:我是在Chrome扩展中这样做的,在这个扩展中,事件是在直接附加到文档的脚本中触发的,侦听器属于扩展代码(内容脚本)。
发布于 2015-11-08 20:02:11
这应该有效,请记住,在调用addEventListener之前,必须先调用dispatchEvent。Javascript通过引用传递对象,因此对原始对象进行任何更改。
var eventArgs = {
detail: {
value: 5
}
};
document.addEventListener('myCustomEvent', function(eventArgs)
{
eventArgs.detail.value = 6; // I want the listener to change the value in "e"
});
document.dispatchEvent(new CustomEvent('myCustomEvent', eventArgs));
$('#button').click(function() {
alert(eventArgs.detail.value);
});https://jsfiddle.net/polarisjunior/uLwaw924/1/如果单击按钮,可以看到值被更新。
https://stackoverflow.com/questions/33598103
复制相似问题