What is the difference between jQuery off() and unbind()

 ̄綄美尐妖づ 提交于 2019-12-10 12:31:07

问题


I was using jQuery .bind() and .unbind() to handle an animation event on scroll.

$(window).bind('scroll', function(){
  ... code ...
  if(code_was_successful){
    $(window).unbind(e);
  }
});

As of 1.7 (I'm using 1.11) we're supposed to use .on() and .off(), but .off() seems to have no support for an event handler unbinding itself. For normal click events and such, I'd have to save the handler to a variable and set up another event handler to unbind it (which defeats the purpose), and for scroll events it's impossible since .off() requires a selector to unbind a specific handler, and scroll events can't have one.

What's the modern way to do this?


回答1:


What's the modern way to do this?

Use a named function expression:

$(window).on('scroll', function handler(){
  ... code ...
  if(code_was_successful){
    $(window).off('scroll', handler);
  }
});

.off() requires a selector to unbind a specific handler

No it does not. Just like .on doesn't require a selector. You only need the selector if you want to unbind a delegated event handler.

As you can read in the documentation of .off about the selector argument:

A selector which should match the one originally passed to .on() when attaching event handlers.

So if you didn't use one in .on, you don't use one in .off.




回答2:


you can use .on() and .off() like so:

function scrollHandler(e){
    if (myCondition) $(e.target).off('scroll', scrollHandler);
}

$(window).on('scroll', scrollHandler);


来源:https://stackoverflow.com/questions/23961409/what-is-the-difference-between-jquery-off-and-unbind

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!