Event.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /**
  2. * Unifies event handling across browsers
  3. *
  4. * - Allows registering and unregistering of event handlers
  5. * - Injects event object and involved DOM element to listener
  6. *
  7. * @author Mark Rolich <mark.rolich@gmail.com>
  8. */
  9. var Event = function () {
  10. "use strict";
  11. this.attach = function (evtName, element, listener, capture) {
  12. var evt = '',
  13. useCapture = (capture === undefined) ? true : capture,
  14. handler = null;
  15. if (window.addEventListener === undefined) {
  16. evt = 'on' + evtName;
  17. handler = function (evt, listener) {
  18. element.attachEvent(evt, listener);
  19. return listener;
  20. };
  21. } else {
  22. evt = evtName;
  23. handler = function (evt, listener, useCapture) {
  24. element.addEventListener(evt, listener, useCapture);
  25. return listener;
  26. };
  27. }
  28. return handler.apply(element, [evt, function (ev) {
  29. var e = ev || event,
  30. src = e.srcElement || e.target;
  31. listener(e, src);
  32. }, useCapture]);
  33. };
  34. this.detach = function (evtName, element, listener, capture) {
  35. var evt = '',
  36. useCapture = (capture === undefined) ? true : capture;
  37. if (window.removeEventListener === undefined) {
  38. evt = 'on' + evtName;
  39. element.detachEvent(evt, listener);
  40. } else {
  41. evt = evtName;
  42. element.removeEventListener(evt, listener, useCapture);
  43. }
  44. };
  45. this.stop = function (evt) {
  46. evt.cancelBubble = true;
  47. if (evt.stopPropagation) {
  48. evt.stopPropagation();
  49. }
  50. };
  51. this.prevent = function (evt) {
  52. if (evt.preventDefault) {
  53. evt.preventDefault();
  54. } else {
  55. evt.returnValue = false;
  56. }
  57. };
  58. };