//  Written  By  Dean  Edwards,   2005
//  With  Input  From  Tino  Zijdel,   Matthias  Miller,   Diego  Perini

//  http://dean.edwards.name/weblog/2005/10/add-event/

function  AddEvent (element,   type,   handler)   {
    If  AddEventListener (element)   {
        Element. The addEventListener (type,   handler,   false);
    }   Else  {
       //  Assign  Each  Event  Handler  A  Unique  ID
        If  (! Handler. $$guid)   Handler. $$guid =  AddEvent. Guid++;
       //  Create  A  Hash  Table  Of  Event  Types  For  The  Element
        If  (! Element. Events)   Element. Events =  {};
       //  Create  A  Hash  Table  Of  Event  Handlers  For  Each  Element/event  Pair
        Var  Handlers =  Element. The events [type];
        If  (! Handlers)   {
            Handlers =  Element. The events [type]  =  {};
           //  Store  The  Existing  Event  Handler  (if  there  is  one)
            If  (element [" on "  +   type])   {
                Handlers [0]  =  Element (" on "  +   type].
            }
        }
       //  Store  The  Event  Handler  In  The  Hash  Table
        Handlers [handler. $$guid]  =  Handler.
       //  Assign  A  Global  Event  Handler  To  Do  All  The  The work
        Element (" on "  +   type]  =  HandleEvent;
    }
};
//  A  Counter  Used  To  Create  Unique  IDs
addEvent. Guid =  1;

function  RemoveEvent (element,   type,   handler)   {
    If  (element. RemoveEventListener)   {
        Element. The removeEventListener (type,   handler,   false);
    }   Else  {
       //  Delete  The  Event  Handler  From  The  Hash  Table
        If  (element. Events  &&  element. The events [type])   {
            Delete  Element. The events [type] [handler. $$guid];
        }
    }
};

function  HandleEvent (event)   {
    Var  ReturnValue =  TRUE;
   //  Grab  The  Event  Object  (IE  uses  a  global  event  object)
    Event =  Event  | |   FixEvent (((enclosing ownerDocument . | |   this. Document  | |   this). The parentWindow  | |   Windows). The event).
   //  Get  A  Reference  To  The  Hash  Table  Of  Event  Handlers
    Var  Handlers =  This. Events [event type];
   //  Execute  Each  Event  Handler
    For  (var  i  in  handlers)   {
        This $$handleEvent =  Handlers [I];
        If  (this $$handleEvent (event)  ===  false)   {
            ReturnValue =  FALSE;
        }
    }
    Return  The returnValue.
};

function  FixEvent (event)   {
   //  Add  The W3C   Standard  Event  The methods of
    Event. PreventDefault =  FixEvent. The preventDefault;
    Event. StopPropagation =  FixEvent. StopPropagation;
    Return  The event;
};
fixEvent. PreventDefault =  The function ()   {
    This. ReturnValue =  FALSE;
};
fixEvent. StopPropagation =  The function ()   {
    This. CancelBubble =  TRUE;
};

you might be interested in the article:

  • JavaScript high-level programming reading notes (17) js Event
  • ExtJs Event mechanism model and basic code process analytical
  • asp.net (c #) method to add the client js to control events
  • JavaScript study notes (16) js Event
  • implementation code dynamically add js events
  • JavaScript tutorial (11) js Event handling
  • general writing js Event implementation code
  • js Event (Event) knowledge organizing


This concludes the body part