138

I'm having a problem. Basically, when a user clicks an 'Edit' link on a page, the following Jquery code runs:

$("#saveBtn").click(function () {
    saveQuestion(id);
});

By doing this, the onClick event of the save button calls the saveQuestion() method and passes on the ID of the question for which the 'Edit' link was clicked.

But if in the same session the user clicks edit on 2 questions, then instead of overwriting the previous click event handler, it instead causes 2 event handlers to run, one which might call saveQuestion(1) and the other might call saveQuestion(2). By doing this 1 question overwrites the other.

Is there a way to remove all previous click events that have been assigned to a button?

5 Answers 5

232

You would use off() to remove an event like so:

$("#saveBtn").off("click");

but this will remove all click events bound to this element. If the function with SaveQuestion is the only event bound then the above will do it. If not do the following:

$("#saveBtn").off("click").click(function() { saveQuestion(id); });
Sign up to request clarification or add additional context in comments.

4 Comments

Since jQuery 1.7, you should use on and off instead of bind and unbind
@LockTar can you suggest how this should be wrote instead?
@JohnMagnolia See my changes above.
.addAttr('onclick'); or .removeAttr('onclick');
15

Is there a way to remove all previous click events that have been assigned to a button?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)});

1 Comment

unbind() is deprecated as of jQuery 3.0, and use of off() has been encouraged since 1.7.
11
$('#saveBtn').off('click').click(function(){saveQuestion(id)});

Comments

2

If you used...

$(function(){
    function myFunc() {
        // ... do something ...
    };
    $('#saveBtn').click(myFunc);
});

... then it will be easier to unbind later.

2 Comments

How do you figure? No matter how a element's event are bound, they can always be unbound the same way... $('#saveBtn').unbind('whatever event(s)'); Now, to RE-BIND... yes, your technique may be easier in certain circumstances.
If you unbind all click events, then it's no different. But if you only wanted to unbind one specific action, I wouldn't want to rewrite that event in two places. And as you said, if I want to rebind it later, that's again easier to do, because I don't have to write the function a third time.
1
$('#saveBtn').off('click').on('click',function(){
   saveQuestion(id)
});

Use jquery's off and on

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.