delegate method
Earlier, I mentioned that the method bindonly adds event handlers to elements that already exist in the DOM structure at the time of its action. When adding new elements, for example, using a method, appendtheir events will not be processed.
But jQuery provides a special method delegatethat allows you to create and register handlers for future elements that aren’t already in the DOM structure. This method has the following use cases:
delegate(‘selector’,’event’, event_handler): Adds a handler for the event. A selector is used to filter the elements for which a handler is added.
delegate(‘selector’,’event’, eventdata, eventhandler): same as above, plus a parameter to pass the event data to the Event object (e.data)
Using the delegate method:
<button>Press1</button>
<button>Press2</button>
<script type="text/javascript">
$(function(){
$('body').delegate('button','click', function(e){
$(this).css('color', 'red');
alert('Button handler: '+$(this).text());
});
$('body').append('<button>Press3</button>');
});
</script>
Here, for all elements buttonthat are in the element body, a click handler is added. And despite the fact that after that a new button is added, a handler will also work for it.
We can also unregister the event handler with the undelegate:
$('body').undelegate('button','click');
on method
The method onwas introduced in jQuery 1.7 and is in many ways a replacement for the delegate method and has the same effect. It has similar usage forms:
on(‘event’, ‘selector’, event_handler)
on(‘event’, ‘selector’, event_data, event_handler)
In fact, compared to the delegate method, in this case, only the selector and event parameters change:
$('body').on('click', 'button', function(e){
$(this).css('color', 'red');
alert('Button handler: '+$(this).text());
});
To unregister event handlers, you can use the method off:
// remove click event handlers for buttons
$('body').off('click','button');
// remove all handlers for elements inside the body tag
$('body').off();