无法通过addEventListener将参数传递给函数

时间:2019-04-24 19:36:51

标签: javascript ecmascript-6

我具有以下功能:

export function myoutsideClickHandler(menuRef) {
    console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%");
    console.log(menuRef);
    document.addEventListener('click', (menuRef)=>test1(menuRef), false);
}

我可以看到menuRef已打印并具有价值。到目前为止一切顺利。

现在在test1()函数中,我有:

export function test1(e, menuRef){
    console.log(menuRef);
}

在控制台中,我看到undefined,这意味着还没有通过addEventListener发送menuRef

我传递menuRef参数的方式是否错误?

2 个答案:

答案 0 :(得分:4)

绑定事件的方式是错误的。您点击的menuRef将成为事件。您没有传递第二个参数。您的点击处理程序应为:

document.addEventListener('click', evt => test1(evt, menuRef), false);

答案 1 :(得分:0)

您可以使用匿名函数来触发需要多个参数的回调函数。因此,根据您的情况,将myoutsideClickHandler()函数更改为以下内容应该有效:

export function myoutsideClickHandler(menuRef) {
    console.log("%%%%%%%%%%%%%%%%%%%%%%%%%%");
    console.log(menuRef);
    document.addEventListener('click', function(e) {
        test1(e, menuRef);
    }, false);
}

但是,我应该注意,您没有正确使用事件处理程序,应该在点击处理程序功能之外调用它们并进行设置,因此您可能需要仔细阅读该内容,以避免将来出现问题。