/javascript/jquery.delegate.js

http://mortar.googlecode.com/ · JavaScript · 56 lines · 36 code · 4 blank · 16 comment · 3 complexity · 9a54bde3c6a44d320d450593d632c67b MD5 · raw file

  1. /*
  2. * jQuery delegate plug-in v1.0
  3. *
  4. * Copyright (c) 2007 J??rn Zaefferer
  5. *
  6. * $Id: jquery.delegate.js 4786 2008-02-19 20:02:34Z joern.zaefferer $
  7. *
  8. * Dual licensed under the MIT and GPL licenses:
  9. * http://www.opensource.org/licenses/mit-license.php
  10. * http://www.gnu.org/licenses/gpl.html
  11. */
  12. // provides cross-browser focusin and focusout events
  13. // IE has native support, in other browsers, use event caputuring (neither bubbles)
  14. // provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
  15. // handler is only called when $(event.target).is(delegate), in the scope of the jQuery-object for event.target
  16. // provides triggerEvent(type: String, target: Element) to trigger delegated events
  17. ;(function($) {
  18. $.each({
  19. focus: 'focusin',
  20. blur: 'focusout'
  21. }, function( original, fix ){
  22. $.event.special[fix] = {
  23. setup:function() {
  24. if ( $.browser.msie ) return false;
  25. this.addEventListener( original, $.event.special[fix].handler, true );
  26. },
  27. teardown:function() {
  28. if ( $.browser.msie ) return false;
  29. this.removeEventListener( original,
  30. $.event.special[fix].handler, true );
  31. },
  32. handler: function(e) {
  33. arguments[0] = $.event.fix(e);
  34. arguments[0].type = fix;
  35. return $.event.handle.apply(this, arguments);
  36. }
  37. };
  38. });
  39. $.extend($.fn, {
  40. delegate: function(type, delegate, handler) {
  41. return this.bind(type, function(event) {
  42. var target = $(event.target);
  43. if (target.is(delegate)) {
  44. return handler.apply(target, arguments);
  45. }
  46. });
  47. },
  48. triggerEvent: function(type, target) {
  49. return this.triggerHandler(type, [jQuery.event.fix({ type: type, target: target })]);
  50. }
  51. })
  52. })(jQuery);