66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
/**
|
|
* Unifies event handling across browsers
|
|
*
|
|
* - Allows registering and unregistering of event handlers
|
|
* - Injects event object and involved DOM element to listener
|
|
*
|
|
* @author Mark Rolich <mark.rolich@gmail.com>
|
|
*/
|
|
var Event = function () {
|
|
"use strict";
|
|
this.attach = function (evtName, element, listener, capture) {
|
|
var evt = '',
|
|
useCapture = (capture === undefined) ? true : capture,
|
|
handler = null;
|
|
|
|
if (window.addEventListener === undefined) {
|
|
evt = 'on' + evtName;
|
|
handler = function (evt, listener) {
|
|
element.attachEvent(evt, listener);
|
|
return listener;
|
|
};
|
|
} else {
|
|
evt = evtName;
|
|
handler = function (evt, listener, useCapture) {
|
|
element.addEventListener(evt, listener, useCapture);
|
|
return listener;
|
|
};
|
|
}
|
|
|
|
return handler.apply(element, [evt, function (ev) {
|
|
var e = ev || event,
|
|
src = e.srcElement || e.target;
|
|
|
|
listener(e, src);
|
|
}, useCapture]);
|
|
};
|
|
|
|
this.detach = function (evtName, element, listener, capture) {
|
|
var evt = '',
|
|
useCapture = (capture === undefined) ? true : capture;
|
|
|
|
if (window.removeEventListener === undefined) {
|
|
evt = 'on' + evtName;
|
|
element.detachEvent(evt, listener);
|
|
} else {
|
|
evt = evtName;
|
|
element.removeEventListener(evt, listener, useCapture);
|
|
}
|
|
};
|
|
|
|
this.stop = function (evt) {
|
|
evt.cancelBubble = true;
|
|
|
|
if (evt.stopPropagation) {
|
|
evt.stopPropagation();
|
|
}
|
|
};
|
|
|
|
this.prevent = function (evt) {
|
|
if (evt.preventDefault) {
|
|
evt.preventDefault();
|
|
} else {
|
|
evt.returnValue = false;
|
|
}
|
|
};
|
|
}; |