Javascript dispatchEvent-如何更改eventArgs



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

此事件包含一个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/如果单击该按钮,您可以看到该值已更新。

相关内容

  • 没有找到相关文章

最新更新