Javascript 向事件回调函数传递附加参数

Javascript 向事件回调函数传递附加参数,javascript,callback,arguments,dom-events,Javascript,Callback,Arguments,Dom Events,我需要在事件上向函数传递附加参数 我尝试了bind,但它只传递e,而不传递结果数据: locationSearch.on("result", dropMarker.bind(this, e) ); 我可以做到: locationSearch.on("result", function(data) { dropMarker({ e: e, data: data }); }; 。。。但是我不能禁用侦听器locationSearch.off(…),

我需要在事件上向函数传递附加参数

我尝试了
bind
,但它只传递
e
,而不传递结果
数据

locationSearch.on("result", dropMarker.bind(this, e) );
我可以做到:

locationSearch.on("result", function(data) {
    dropMarker({ 
        e: e,
        data: data
    });
};

。。。但是我不能禁用侦听器
locationSearch.off(…)
,因为它是一个匿名函数

只需将函数调用包装到另一个将成为回调的函数中即可

locationSearch.on("result", wrapper);

function wrapper(e) { dropMarker(e, data); }
下面是一个例子:

$(“按钮”)。打开(“单击”,包装器);
let data=“some data”;
函数包装器(e){
//包装器只调用实际的处理程序
处理程序(e,数据);
}
函数处理程序(e,数据){
//由于包装器已命名,因此可以断开连接
$(e.target).off(“单击”,包装器);
//你可以做任何你需要做的事
控制台日志(例如类型、数据);
}


单击我
只需命名一个函数,然后调用它:

function handler(e) {
    dropMarker({ e: e, data: data });
}

locationSearch.on("result", handler);

是的,但是库没有提供一个
one
once
发射器,所以我还需要立即关闭侦听器,这在匿名函数中是不可能的,对吗?但是,你不能像问题中所说的那样禁用侦听器,因为它是一个匿名函数。我已经更新了答案。使用命名函数,可以删除处理程序。