더욱 빨라진 jQuery 1.4.2 릴리즈
PDF.delegate()
와 .undelegate()
가 추가되었습니다. .live()
와 .die()
메서드를 보완하려는 목적으로 추가된 메서드입니다. 이밖에도 일부 버그가 수정되었다고 하네요. John Resig씨 좀 짱인듯.//For example:
$("table").delegate("td", "hover", function(){
$(this).toggleClass("hover");
});
//This is equivalent to the following code written using .live():
$("table").each(function(){
$("td", this).live("hover", function(){
$(this).toggleClass("hover");
});
});
//Additionally, .live() is roughly equivalent to the following .delegate() code.
$(document).delegate("td", "hover", function(){
$(this).toggleClass("hover");
});
회사 프로젝트에 1.4.2를 적용하는 과정에서 작은 문제가 발생했습니다. IE계열 브라우저에서만 발견되는 이벤트 핸들러에서 발생한 오류였습니다. 오류 메시지는 "'events' is null or not an object"었던 것으로 기억합니다. Uncompressed 버전의 소스 1,919라인을 보면 아래와 같은 코드를 발견할 수 있습니다.
var events = jQuery.data(this, "events"), handlers = events[ event.type ];
이 코드에서
events
변수에 null
이 할당 되어 버리는 현상이 있더군요. 문제가 발생하지 않는 1.4.1 버전에서 어떻게 처리하고 있나 살펴보니 아래와 같은 코드가 사용되고 있더군요.handlers = ( jQuery.data(this, "events") || {} )[ event.type ];
그래서 다음과 같이 수정하니 문제 없이 잘 작동합디다.
var events = jQuery.data(this, "events") || {}, handlers = events[ event.type ]; //fixed by.
혹시, 저와 동일한 문제를 격고 계시면 요렇게 패치 해 보세요.