본문 바로가기
프로그래밍/jQuery

undelegate(), 바인딩 해제하기

by zoo10 2012. 3. 20.

undelegate

원문 링크 http://api.jquery.com/undelegate/

.undelegate()Returns : jQuery

개요 : 루트 요소의 특정 집합에 기반을 두고, 현재 선택과 일치하는 모든 요소에 대한 이벤트로부터 핸들러를 제거합니다.

  • .undelegate()
  • .undelegate( selector, eventType )
  • selector 선택자
  • eventType JavaScript 이벤트 타입 문자열, "click", "keydown" 같은
  • .undelegate( selector, eventType, handler(eventObject) )
  • selector 선택자
  • eventType JavaScript 이벤트 타입 문자열, "click", "keydown" 같은
  • handler(eventObject) 이벤트가 발생하면 동시에 실행될 기능.
  • .undelegate( selector, events )
  • selector 선택자
  • events 하나 이상의 이벤트 타입과 해제할 기능들의 맵 데이터.
  • .undelegate( namespace )
  • namespace 네임스페이스에 해당하는 모든 이벤트가 바인딩 해제됨.

.undelegate() 함수는 .delegate() 로 바인딩된 이벤트 핸들러들을 해제합니다.. jQuery 1.7에 와서는, .on().off() 함수로 대체되었습니다.

예 제  
바인딩과 해제에 대한 예제입니다.

<!DOCTYPE html>
<html>
<head>
  <style>
button { margin:5px; }
button#theone { color:red; background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <button id="theone">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>
<div style="display:none;">Click!</div>
<script>
function aClick() {
  $("div").show().fadeOut("slow");
}
$("#bind").click(function () {
  $("body").delegate("#theone", "click", aClick)
    .find("#theone").text("Can Click!");
});
$("#unbind").click(function () {
  $("body").undelegate("#theone", "click", aClick)
    .find("#theone").text("Does nothing...");
});
</script>

</body>
</html>

미리보기

바인딩하고 해제하는 방법에 대한 예제입니다. 버튼을 눌러보시면서 확인하세요.

 

예 제  
모든 p 태그의 이벤트 바인딩을 해제하기

$("p").undelegate()

 

예 제  
모든 p 태그의 click 이벤트 바인딩을 해제하기

$("p").undelegate( "click" )

 

예 제  
세번째 인자를 사용하여 바인딩했던 이벤트만 해제하기

var foo = function () {
  // code to handle some kind of event
};

// ... now foo will be called when paragraphs are clicked ...
$("body").delegate("p", "click", foo);


// ... foo will no longer be called.
$("body").undelegate("p", "click", foo);

 

예 제  
네임스페이스를 사용하여 그에 해당하는 모든 이벤트 핸들러를 해제하기

var foo = function () {
  // code to handle some kind of event
};

// delegate events under the ".whatever" namespace
$("form").delegate(":button", "click.whatever", foo);

$("form").delegate("input[type='text']", "keypress.whatever", foo); 

// unbind all events delegated under the ".whatever" namespace

$("form").undelegate(".whatever");

 

바인딩을 해제하는 방법은 많네요. 잘 구분하시면서 사용하셔야 할듯.

그럼 즐프하세요.

※ 본 예제는 http://www.jquery.com 에 있는 내용임을 밝힙니다.