我有一个由某个函数触发的自定义事件。
此事件包含一个eventArgs
,其中包含详细信息。我希望处理程序/侦听器能够更改eventArgs
,以便原始函数获得更改后的值。这可能吗?
到目前为止,我已经尝试过这个:
处理程序/侦听程序
document.addEventListener('myCustomEvent', function(eventArgs)
{
eventArgs.detail.value = newValue; // I want the listener to change the value in "e"
});
呼叫者
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扩展中这样做,其中事件在直接附加到文档的脚本中激发,侦听器属于扩展代码(内容脚本)。
这应该有效,请记住,在调用dispatchEvent之前,您必须调用addEventListener。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/如果单击该按钮,您可以看到该值已更新。