How to overwrite jquery event handlers
Solution 1:
As of jQuery 1.7 you should be using off to remove event handlers and on to add them, though you can still use the click
shorthand.
$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);
Original answer:
If you want to replace all click handlers, call unbind first without a function argument. If you want to replace all event handlers, don't specify the event type.
$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);
Solution 2:
Use a namespace to make sure you don't remove any other listeners:
$('#clickme').off('click.XXX').on('click.XXX', fireclick);
As long as no other code uses XXX
, you can be sure that you have not messed up some other behaviour that you weren't aware of.
Solution 3:
You may use the jQuery function unbind to remove the first event:
var fireClick = function() { alert('Wuala!!!') };
$('#clickme').click(fireclick);
$('#clickme').unbind('click', fireClick); // fireClick won't fire anymore...
$('#clickme').click(fireclick); // ...but now it will
Solution 4:
I would try to eliminate the extra calls, but short of tyhat you could make sure to call both of these each time:
$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);
Solution 5:
$(document).off('click', '#clickme').on('click', '#clickme', fireclick);