我有一个由某个函数触发的自定义事件。
此事件包含带有详细信息的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中添加复杂对象,但在这种情况下,处理程序获取null eventArgs。
难道不可能完成,或者我错过了什么?
重要提示:我在Chrome扩展程序中执行此操作,其中事件在直接附加到文档的脚本中触发,并且侦听器属于扩展代码(内容脚本)。
答案 0 :(得分:1)
这应该有效,请记住,在调用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/ 如果单击该按钮,则可以看到值已更新。