jQuery를 사용하는 응용 프로그램에서 사용자 정의 이벤트를 포함하여 모든 유형의 이벤트가 트리거 될 때마다 콘솔에 로그인하고 싶습니다.jQuery의 모든 이벤트 유형 처리
jQuery 소스를 수정하지 않고 모든 가능한 이벤트 유형의 긴 긴 목록에 바인딩하지 않고이 작업을 수행 했습니까?
jQuery를 사용하는 응용 프로그램에서 사용자 정의 이벤트를 포함하여 모든 유형의 이벤트가 트리거 될 때마다 콘솔에 로그인하고 싶습니다.jQuery의 모든 이벤트 유형 처리
jQuery 소스를 수정하지 않고 모든 가능한 이벤트 유형의 긴 긴 목록에 바인딩하지 않고이 작업을 수행 했습니까?
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.live
가 jQuery.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
을 덮어 안전하게 덮어 말할 것입니다.
[[라이브 예]
니스 접근하지만 당신은 그것을 무시하여 jQuery 코드를 수정했다. 그럼에도 불구하고 투표하십시오.) – Nikhil
모든 것이 표준 브라우저 이벤트를 제외하고 그 방법을 통과 한 것처럼 보입니다. 그러나 그것은 내 목적에 충분합니다. 감사! –
@Nikhil - 실행시 메서드를 패치하는 것이 좋습니다. 나는 그 근원을 만지고 싶지 않았다. :) –