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?
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
.
you can use .on()
and .off()
like so:
function scrollHandler(e){
if (myCondition) $(e.target).off('scroll', scrollHandler);
}
$(window).on('scroll', scrollHandler);
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With