Javascript 使用匿名函数定义打开时jQuery关闭

Javascript 使用匿名函数定义打开时jQuery关闭,javascript,jquery,Javascript,Jquery,我有一个函数,它用一个回调函数注册一个事件处理程序,该回调函数只接收部分事件数据 我的问题是我想通过在.on之前调用.off来防止函数多次注册,但我不确定在这种情况下如何指定对.off的回调,因为它必须与.on使用的函数相同 例如: function myclick(elem, callback) { //elem.off('click', ???? ); // how should this be specified elem.on('click', function (e) {

我有一个函数,它用一个回调函数注册一个事件处理程序,该回调函数只接收部分事件数据

我的问题是我想通过在
.on
之前调用
.off
来防止函数多次注册,但我不确定在这种情况下如何指定对
.off
的回调,因为它必须与
.on
使用的函数相同

例如:

function myclick(elem, callback) {
  //elem.off('click', ???? ); // how should this be specified
  elem.on('click', function (e) {
     callback(e.target);
  }
}

我正在寻找一种不依赖于jQuery的通用解决方案,因为任何提供开和关功能的库都可能出现这种情况。

实现这一点的一种方法是使用它来确保只删除具有给定名称空间的处理程序,而不删除其他处理程序

function myclick(elem, callback) {
  elem.off('click.myradomnamespace').on('click.myradomnamespace', function (e) {
     callback(e.target);
  }
}

但是,如果您这样做是为了处理动态元素的use,那么一种方法是使用,它将确保只有具有给定名称空间的处理程序被删除,而其他处理程序则不会被删除

function myclick(elem, callback) {
  elem.off('click.myradomnamespace').on('click.myradomnamespace', function (e) {
     callback(e.target);
  }
}

但如果您这样做是为了处理动态元素的使用

下一个参数是您之前传递的委托(函数),如果您不知道之前传递了哪个委托,只需简单地传递“**”即可删除所有委托:

elem.off('click', '**');
有关更多信息,请参阅:

希望这能帮助你

下一个参数是您之前传递的委托(函数),如果您不知道之前传递了哪个委托,只需简单传递“**”即可删除所有委托:

elem.off('click', '**');
有关更多信息,请参阅:


希望这能帮助你

用于在动态创建的元素上绑定事件<代码>$(staticParentSelector)。在('click','dynamicElementSelector',函数…用于绑定动态创建的元素上的事件。
$(staticParentSelector)。在('click'、'dynamicElementSelector',function…
thx..我正在寻找一种不依赖于jquery的通用解决方案,因为任何提供开和关功能的库都可能出现这种情况。@kofifus那么在提问时请不要使用jquery标签。@kofifus每个库都可以有自己的逻辑来处理这种情况。@o一般解决方案可能是使用函数引用而不是匿名函数,但如何指定此函数引用?thx..我正在寻找一个不依赖于jquery的一般解决方案,因为这可能发生在任何提供开和关功能的库中。@kofifus那么在问问题时请不要使用jquery标签.@kofifus每个库在如何处理此类情况上都有自己的逻辑…一个通用的解决方案可能是使用函数引用而不是匿名函数,而是如何指定此函数引用?thx。我不想删除所有委托,只有myclickThis设置的委托将删除ele中带有click事件的所有委托映射如果您只需要删除specify delegate,则需要在第二个参数中传递委托。很抱歉,我无法在注释中编写完整的代码,但您可以将函数带到具有名称的函数中,您可以使用函数名称传递到on和off
elem.on('click',函数(e){callback(e.target);}
elem.on('click',newFunction);elem.off('click',newFunction)
是的,但是newFunction会是什么样子呢?它需要以某种方式接收回调,并且与回调是唯一的..它是你放在on-click中的函数,简单如下:
函数newFunction=function(e){callback(e.target);}
您现在明白了吗?thx.我不想删除所有代理,只有myclickThis设置的代理将删除元素中带有click事件的所有代理映射。如果您只需要删除specify delegate,则需要在第二个参数中传递代理。很抱歉,我无法在注释中写入完整代码,但您可以使用f函数在对具有名称的函数单击时,您可以使用函数名传递给打开和关闭
elem.on('click',function(e){callback(e.target);}
elem.on('click',newFunction);elem.off('click',newFunction)
是的,但是newFunction会是什么样子呢?它需要以某种方式接收回调,并与回调保持唯一..这是您在单击中放置的函数,简单如下:
function newFunction=function(e){callback(e.target);}
现在您已经清楚了吗?