Javascript dispatchEvent - 如何更改eventArgs

时间:2015-11-08 19:32:22

标签: javascript events javascript-events google-chrome-extension event-handling

我有一个由某个函数触发的自定义事件。

此事件包含带有详细信息的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扩展程序中执行此操作,其中事件在直接附加到文档的脚本中触发,并且侦听器属于扩展代码(内容脚本)。

1 个答案:

答案 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/ 如果单击该按钮,则可以看到值已更新。