The_asMan
The_asMan

Reputation: 6403

How to remove a callback function from jQuery widget

I have a widget that I am assigning a callback function to for a specific event.
The following code works and triggers my callback just fine.

$(selector).MyFancyWidget('option', 'onComplete', this._onComplete);

My issue is after the event fires I want to remove the callback from inside the _onComplete method.
onComplete is an event that gets fired in the widget using the _trigger method and works fine. Doing something like

$(selector).MyFancyWidget('option', 'onComplete', $.noop);

Does not detach the callback ( i assume it is just adding another listener.
For clarity here is the code inside the widget that will trigger the event.

instance._trigger('onComplete', e, {currentTarget: instance});

So my question here is how do I remove that callback?
It's not that I don't want to fire the event anymore I just don't want to listen to it anymore.

Upvotes: 1

Views: 737

Answers (1)

RobH
RobH

Reputation: 3612

The most straightforward way of doing this would be to make the callback only do something once. So wherever you define your _oncomplete function:

var completeRan = false;
this._onComplete = function(e, args) {
    if (completeRan) {
        return;
    }
    // Rest of your code.
    completeRan = true;
    return this;
}

Upvotes: 2

Related Questions