Skip to content

Instantly share code, notes, and snippets.

@bloodyowl
Created December 3, 2012 14:40
Show Gist options
  • Save bloodyowl/4195408 to your computer and use it in GitHub Desktop.
Save bloodyowl/4195408 to your computer and use it in GitHub Desktop.
Simple Event delegation in CraftJS

Simple event delegation Craft.js

Description

Simple event delagation plugin.

Usage

Syntaxes

$(myElement).delegate(event, selector, handler)
Event.delegate($(myElement), event, selector, handler)

Arguments

  • event (String) Event to listen
  • selector (String) Simple one-level selector (only supports #id, .className and tagName)
  • handler (Function) Event handler. Executed with [eventObject, target, handler] as arguments.
Element.extend(function(){
function matches(element, selector, ancestor){
var result
, firstChar = selector.charAt(0)
if(!element) return false
while(element && "nodeName" in element && element != ancestor){
if(firstChar == ".") result = $(element).hasClass(selector.slice(1))
else if(firstChar == "#") result = $(element).id == selector.slice(1)
else result = element.nodeName.toLowerCase() == selector
if(result) return element
element = element.parentNode
}
}
function delegate(event, selector, handler){
var self = this
return Event.listen(self, event, function _handler(e){
e = e || window.event
var target = e.target || e.srcElement
, element
if(element = matches(target, selector, self)) handler(e, $(element), _handler)
})
}
Object.extend(Event, {
delegate : function(element, event, selector, handler){
return delegate.call(element, event, selector, handler)
}
})
return {
delegate : delegate
}
})
Element.extend(function(){function a(a,b,c){var d,e=b.charAt(0);if(!a)return!1;for(;a&&"nodeName"in a&&a!=c;){if(d="."==e?$(a).hasClass(b.slice(1)):"#"==e?$(a).id==b.slice(1):a.nodeName.toLowerCase()==b)return a;a=a.parentNode}}function b(b,c,d){var e=this;return Event.listen(e,b,function f(b){b=b||window.event;var h,g=b.target||b.srcElement;(h=a(g,c,e))&&d(b,$(h),f)})}return Object.extend(Event,{delegate:function(a,c,d,e){return b.call(a,c,d,e)}}),{delegate:b}});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment