.delegate()
원문 링크
http://api.jquery.com/delegate/
개요 : 루트 요소의 특정 집합을 기반으로, 지금 또는 나중에, 선택과 일치하는 모든 요소에 대해 하나 이상의 이벤트 처리기를 묶어줍니다.
- .delegate( selector, eventType, handler )
- selector 이벤트를 발생할 요소를 걸러낼 선택자.
- eventType 공백으로 구분된 하나 이상의 JavaScript 이벤트를 포함하는 문자열, "click", "keydown" 또는 사용자 정의 함수명.
- handler 이벤트가 발생할 때 실행될 함수.
- .delegate( selector, eventType, eventData, handler )
- selector 이벤트를 발생할 요소를 걸러낼 선택자.
- eventType 공백으로 구분된 하나 이상의 JavaScript 이벤트를 포함하는 문자열, "click", "keydown" 또는 사용자 정의 함수명.
- eventData 이벤트 핸들러에 전달할 데이터 집합.
- handler 이벤트가 발생할 때 실행될 함수.
- .delegate( selector, events )
- selector 이벤트를 발생할 요소를 걸러낼 선택자.
- events 하나 이상의 이벤트와 이벤트에서 실행될 함수.
jQuery 1.7 에서, .delegate() 를 .on() 함수가 대체하게 되었습니다. 하지만, 이전 버전에서는 delegation이 이벤트를 사용하는 가장 유용한 방법이었습니다.. 더 많은 정보를 원하시면 .on() 함수를 참고하시기 바랍니다. 아래는 두 함수의 일반적인 사용법입니다.
$(elements).delegate(selector, events, data, handler); // jQuery 1.4.3+ $(elements).on(events, selector, data, handler); // jQuery 1.7+
.delegate() 코드를 더 살펴보면 :
$("table").delegate("td", "click", function() {
$(this).toggleClass("chosen");
});위 구문을 .on() 함수로 바꿔본다면 :
$("table").on("click", "td", function() {
$(this).toggleClass("chosen");
});delegate() 함수로 바인딩 된 이벤트를 제거하려면 .undelegate() 함수를 참고하세요.
예 제
문단(p)를 클릭하면 문단을 하나 추가하기.
<!DOCTYPE html>
<html>
<head>
<style>
p { background:yellow; font-weight:bold; cursor:pointer;
padding:5px; }
p.over { background: #ccc; }
span { color:red; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p>Click me!</p>
<span></span>
<script>
$("body").delegate("p", "click", function(){
$(this).after("<p>Another paragraph!</p>");
});
</script>
</body>
</html>미리보기
delegate() 함수는 새로 추가된 p에도 자동적용되네요. 새로 만들어진 애들 클릭해도 또 추가되요. 왜 그럴까요. delegate('p'....)에서 p에 click 이벤트를 적용하니 그런것 같습니다.
예 제
p를 클릭하면 안에 있는 텍스트를 알림창으로 보여주기
$("body").delegate("p", "click", function(){
alert( $(this).text() );
});예 제
a 태그를 클릭하면 링크 이동을 취소시키기
$("body").delegate("a", "click", function() { return false; })예 제
preventDefault 함수를 사용해서 기본 이벤트를 취소시키기
$("body").delegate("a", "click", function(event){
event.preventDefault();
});예 제
사용자 정의 함수 바인딩하기
<!DOCTYPE html>
<html>
<head>
<style>
p { color:red; }
span { color:blue; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p>Has an attached custom event.</p>
<button>Trigger custom event</button>
<span style="display:none;"></span>
<script>
$("body").delegate("p", "myCustomEvent", function(e, myName, myValue){
$(this).text("Hi there!");
$("span").stop().css("opacity", 1)
.text("myName = " + myName)
.fadeIn(30).fadeOut(1000);
});
$("button").click(function () {
$("p").trigger("myCustomEvent");
});
</script>
</body>
</html>미리보기
위의 예제들하고는 좀 다르네요. 일단 p와 연결된 이벤트 함수가 myCustomEvent로 사용자 정의 함수죠. 버튼을 클릭하면 trigger(방아쇠를 당긴다는 의미입니다.)로 사용자정의함수를 실행시키고 있습니다. 'Hi, there!' 문자가 바뀌고 페이드 아웃 하는 기능을 수행하도록 되어 있습니다. $(this)는 p가 되겠죠. 이해되시죠??
바인딩을 하는 여러가지 방법이 있네요. 그 중 편한 방법을 사용하심 될것 같습니다. 최신인 1.7버젼에서 추가된 on(), off()를 써보시면 어떨까요.
그럼 즐프하세요.
※ 본 예제는 http://www.jquery.com 에 있는 내용임을 밝힙니다.
'프로그래밍 > jQuery' 카테고리의 다른 글
| jQuery API 정복 - event.target, 이벤트가 발생한 요소 (2) | 2011.12.13 |
|---|---|
| jQuery API 정복 - event.pageY, 마우스 Y 좌표 (0) | 2011.12.13 |
| jQuery API 정복 - event.pageX, 마우스 X 좌표 (0) | 2011.12.13 |
| jQuery API 정복 - die(), 이벤트 해제하기 (2) | 2011.12.08 |
| jQuery API 정복 - 더블클릭 이벤트, dblclick() (4) | 2011.11.25 |
| jQuery API 정복 - 클릭 이벤트, click() (0) | 2011.11.25 |
| jQuery API 정복 - 변경 이벤트, change() (0) | 2011.11.24 |
| jQuery API 정복 - 포커스 잃을 때 이벤트, blur() (1) | 2011.11.24 |