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