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

javascript, jquery, jquery-events

Solution

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`.

Problem

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?

Original source