jQuery' s $.fn.one
应该在事件被触发后关闭,并且监听器已经运行了脚本。
但是,如果它正在收听多个事件,那么在其中一个事件发生后,它就不会为所有收听的事件关闭。
使用此事件侦听器:
var transitionend = "webkitTransitionEnd msTransitionEnd transitionend";
$( "foo" ).one( transitionend , function(){
foo.bar();
} );
foo.bar()
方法将在chrome中执行2次,因为webkitTransitionEnd
transitionend
都会触发。
我正在努力实现一个优雅解决方案,其中触发其中一个侦听方法将关闭侦听器中的所有其他方法。
答案 0 :(得分:4)
我认为你最好的选择可能只是在事件发生后手动删除绑定?
像:
var transitionend = "webkitTransitionEnd msTransitionEnd transitionend";
$( "foo" ).on( transitionend , function(){
foo.bar();
$(this).off(transitionend);
} );
编辑: 如果你想要一个更优雅的解决方案(假设你需要做很多这样的事情),看起来有人已将上述内容包装到另一个Stack Overflow回答的可重用函数中:{{ 3}}
此外: https://stackoverflow.com/a/24589200/820822似乎是同一个问题,因此可能会有其他一些有用的答案。