2011-03-25 3 views
6

jQuery를 사용하는 응용 프로그램에서 사용자 정의 이벤트를 포함하여 모든 유형의 이벤트가 트리거 될 때마다 콘솔에 로그인하고 싶습니다.jQuery의 모든 이벤트 유형 처리

jQuery 소스를 수정하지 않고 모든 가능한 이벤트 유형의 긴 긴 목록에 바인딩하지 않고이 작업을 수행 했습니까?

답변

8
var oldTrigger = jQuery.event.trigger; 

jQuery.event.trigger = function(event, data, elem) { 
    // do stuff 
    oldTrigger.apply(this, arguments); 
} 

모든 트리거가이 방법을 통과하는지 다시 한번 확인해야합니다. 적어도 $.fn.trigger에서

trigger: function(type, data) { 
      return this.each(function() { 
        jQuery.event.trigger(type, data, this); 
      }); 
    }, 

은 또한 당신이 jQuery.data을 덮어 쓰기 이벤트 핸들러의 설정을 가로 챌 수 있습니다

  // Trigger the event, it is assumed that "handle" is a function 
      var handle = jQuery.data(elem, "handle"); 
      if (handle) { 
        handle.apply(elem, data); 
      } 

jQuery.event.trigger

통해 간다.

for (var i = 0, l = this.length; i < l; i++) { 
          jQuery.event.add(this[i], type, handler, data); 
        } 

bind 방법은 핸들러를 추가 할 수 jQuery.event.add를 사용합니다. 당신은 또한 그것을 가로 챌 수 있습니다.

if (name === "live") { 
           // bind live handler 
           context.each(function(){ 
             jQuery.event.add(this, liveConvert(type, selector), 
               { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType }); 
           }); 

$.fn.livejQuery.event.add 통과 $.fn.trigger을 통해 또는 $.fn.bind

jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " + 
     "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 
     "change select submit keydown keypress keyup error").split(" "), function(i, name) { 

     // Handle event binding 
     jQuery.fn[ name ] = function(fn) { 
       return fn ? this.bind(name, fn) : this.trigger(name); 
     }; 

     if (jQuery.attrFn) { 
       jQuery.attrFn[ name ] = true; 
     } 
}); 

모든 표준 이벤트 이동합니다.

결론적으로 모든 jQuery.event.add을 통해 이동하고 회전에서 해당이 작업을 수행합니다 : 이벤트 핸들러를 쓰고

if (!eventHandle) { 
        elemData.handle = eventHandle = function() { 
          // Handle the second event of a trigger and when 
          // an event is called after a page has unloaded 
          return typeof jQuery !== "undefined" && !jQuery.event.triggered ? 
            jQuery.event.handle.apply(eventHandle.elem, arguments) : 
            undefined; 
        }; 
      } 

elem는 DOM 노드입니다 jQuery.data(elem)에. [결론적으로 []

는 개인적으로 나는 jQuery.data가 복잡하고 고통이 너무 대신 jQuery.event.add을 덮어 안전하게 덮어 말할 것입니다.

[[라이브 예]

http://jsfiddle.net/qLRuT/8/

+0

니스 접근하지만 당신은 그것을 무시하여 jQuery 코드를 수정했다. 그럼에도 불구하고 투표하십시오.) – Nikhil

+0

모든 것이 표준 브라우저 이벤트를 제외하고 그 방법을 통과 한 것처럼 보입니다. 그러나 그것은 내 목적에 충분합니다. 감사! –

+0

@Nikhil - 실행시 메서드를 패치하는 것이 좋습니다. 나는 그 근원을 만지고 싶지 않았다. :) –