2012-05-24 8 views
4

JQuery에 대해 말 할 수 있습니까? unbind?를 명시 적으로 호출하지 않고이 이벤트 핸들러를 추가하기 전에 이벤트 핸들러를 바인드 해제하십시오.JQuery에서 이벤트 핸들러를 자동으로 바인딩 해제

뭔가 진정한 의미는 내가 요소에 설정된 모든 클릭 핸들러 바인딩을 해제 할

$("jq selector").click(function() { ...}, true); 

있다. 저는 여러 가지 경우에이 문제를 보았습니다. 이벤트 처리기의 바인딩을 먼저 해제하지 않기 때문에 어떤 경우에는 이상한 행동이있었습니다.

감사합니다. 당신이 인수없이) (때어 전화, 요소와 관련된 모든 이벤트를 제거하려면

+5

왜 단지 $ (selector) .unbind ("click")하지 않습니까? (function() {...}); ' – Pointy

+0

바인딩 해제를 호출하지 않으시겠습니까? – epascarello

+1

jquery는 새 처리기 첨부 파일을 "추가"하지만 대체하지는 않습니다. 제거하려는 항목은 수동으로 제거해야합니다. – Joseph

답변

5

unbind 방법

$("jq selector").unbind('click'); 

를 사용하고는 요소 (들)에 연결된 모든 핸들러를 제거합니다 :

$("jq selector").unbind(); 
+0

나는 OP가 예제로 '클릭'을 사용하고 있으며 이벤트를 모른 채 일반 및 모든 바인딩을 제거하기를 원합니다. 전의. unbind ('all') –

+0

@fbfcn : 매개 변수없이 바인드 해제하면 모든 바인딩이 제거됩니다. – Shyju

+0

예, 전에 ubind를 명시 적으로 호출하지 않는 방법이 있는지 묻는 것입니다. – Hyperd

1
$(selector).die("click").click(function() { ... }); 
+1

'die'는 jQuery 1.7에서 더 이상 사용되지 않습니다. 'off'이어야합니다. – epascarello

+0

YES : jQuery 1.7부터는 .die() (및 그 보완적인 메소드, .live())를 사용하지 않는 것이 좋습니다. 대신 .off()를 사용하여 .on()으로 바인드 된 이벤트 핸들러를 제거하십시오. – Dev

0

이 작업을 수행하는 방법에는 여러 가지가 있지만 나는 올바른 될 것이라고 믿습니다

$(selector).unbind("click").click(function() { ... }); 

나는 대답에 대한 답글을 Pointy에게주었습니다.하지만 답변으로 추가하지 않았기 때문에 나는 그것을 커뮤니티에 공유했습니다.

관련 문제