Event checking
Checking to see if a delegated event has been set
by Terry King
HTML
Without the hasEvent check clicking the button would fire two events and create two further buttons. New buttons automatically have the click event.
<div id="container"></div>
<div id="results"></div>
JavaScript
function clicked(){
$('#container').append('<button>Click me</button>');
}
function hasEvent(element,selector,event){
if (!$._data(element, 'events')){
// event is undefined to return false straight away
return false;
} else {
var found=false;
// multiple events may be set on the element so iterate through to
// find if the selector matches
$.each($._data(element, 'events')[event],function(i,e){
if (e.selector==selector){
found=true;
return false; // exit .each loop
}
});
return found;
}
}
if (!hasEvent(document,'button','click')){
$(document).on('click','button',clicked);
}
if (!hasEvent(document,'button','click')){
$(document).on('click','button',clicked);
}
$('#container').append('<button>Click me</button>');