Skip to content

Instantly share code, notes, and snippets.

@MarquisF
Created January 11, 2016 16:07
Show Gist options
  • Save MarquisF/f5b9b24fc0cd86df7b5b to your computer and use it in GitHub Desktop.
Save MarquisF/f5b9b24fc0cd86df7b5b to your computer and use it in GitHub Desktop.

Revisions

  1. Satake created this gist Nov 25, 2012.
    75 changes: 75 additions & 0 deletions EventUtil.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,75 @@
    // Cross Browser Event Utility
    // Nicholas Zakas, Professional JavaScript for Web Developers p.441

    (function(window, document) {
    'use strict';
    var
    EventUtil = {
    addHandler: function( element, type, handler ) {
    if ( element.addEventListener ) {
    element.addEventListener ( type, handler, false );
    } else if ( element.attachEvent ) {
    element.attachEvent ( "on" + type, handler );
    } else {
    element["on" + type] = handler;
    }
    },

    getEvent: function ( event ) {
    return event ? event : window.event;
    },

    getTarget: function ( event ) {
    return event.target || event.srcElement;
    },

    preventDefault: function ( event ) {
    if ( event.preventDefault ) {
    event.preventDefault();
    } else {
    event.returnValue = false;
    }
    },

    removeHandler: function( element, type, handler ) {
    if ( element.removeEventListener ) {
    element.removeEventListener ( type, handler, false );
    } else if ( element.detachEvent ) {
    element.detachEvent ( "on" + type, handler );
    } else {
    element["on" + type] = null;
    }
    },

    stopPropagation: function ( event ) {
    if ( event.stopPropagation ) {
    event.stopPropagation();
    } else {
    event.cancelBubble = true;
    }
    }

    };


    var newAnchor = document.createElement( "a" );
    newAnchor.href = "#";
    newAnchor.appendChild ( document.createTextNode("Test Link") );
    document.body.appendChild(newAnchor);

    newAnchor.onclick = function ( event ) {
    var target;

    event = EventUtil.getEvent ( event );
    EventUtil.preventDefault ( event );
    EventUtil.stopPropagation ( event );
    target = EventUtil.getTarget ( event );

    if ( "innerText" in target ) {
    target.innerText = target.innerHTML + 'X';
    } else {
    target.textContent = target.textContent + 'X';
    }
    };

    })(window, window.document);