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>');