首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript dispatchEvent -如何更改eventArgs

Javascript dispatchEvent -如何更改eventArgs
EN

Stack Overflow用户
提问于 2015-11-08 19:32:21
回答 1查看 1.3K关注 0票数 1

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

此事件包含一个包含详细信息的eventArgs,等等。我希望处理程序/侦听器能够更改eventArgs,以便原始函数获得其更改的值。这有可能吗?

到目前为止,我已经尝试过了:

Handler/Listener

代码语言:javascript
复制
document.addEventListener('myCustomEvent', function(eventArgs)
{
    eventArgs.detail.value = newValue; // I want the listener to change the value in "e"
});

Caller

代码语言:javascript
复制
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扩展中这样做的,在这个扩展中,事件是在直接附加到文档的脚本中触发的,侦听器属于扩展代码(内容脚本)。

EN

回答 1

Stack Overflow用户

发布于 2015-11-08 20:02:11

这应该有效,请记住,在调用addEventListener之前,必须先调用dispatchEvent。Javascript通过引用传递对象,因此对原始对象进行任何更改。

代码语言: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/如果单击按钮,可以看到值被更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33598103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档