Andrew Evans
Andrew Evans

Reputation: 897

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

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?

Upvotes: 18

Views: 23753

Answers (3)

Jelle
Jelle

Reputation: 1034

Using off is the modern way, unbind is the old way. Use off.

See jquery documentation:

As of jQuery 3.0, .unbind() has been deprecated. It was superseded by the .off() method since jQuery 1.7, so its use was already discouraged.

Upvotes: 2

Felix Kling
Felix Kling

Reputation: 816462

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.

Upvotes: 20

Patrick Gunderson
Patrick Gunderson

Reputation: 3281

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

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

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

Upvotes: 2

Related Questions