2013-06-12 2 views
1

와 나는과 같이 한 번 작업을 트리거 할 one() 방법을 사용하고 있습니다 :클릭 요소를 한 번 jQuery를

$("#tabs .nav li a").one("click", function(){ 
     //do something 
}); 

이 각 링크에 대해 한 번 작동합니다. 예를 들어 .nav li a를 클릭하면 액션이 실행될 것으로 예상됩니다. 다른 링크를 클릭하면 더 이상 해당 기능이 작동하지 않게됩니다.

어떻게 하시겠습니까?

$("#tabs .nav li a").on("click.once", function(){ 
    // do something 
    $("#tabs .nav li a").off("click.once"); 
}); 

를이 다른를 제거하는 실수 방지하기 위해 사용자 정의 event namespace을 사용

답변

5

에 대한 .on().off()을 사용할 수 있습니다 요소의 이벤트는 click입니다.

당신은 다음과 같이 이벤트 핸들러를 제거 unbind 또는 off을 사용할 수 있습니다
+1

+1 네임 스페이스 용. 또 다른 옵션은 정확한 핸들러를 언 바인드하기 위해서만 함수를'off'로 전달하는 것입니다. –

+0

네임 스페이스에 대해 전혀 알지 못했습니다. – JCHASE11

3

당신은 .on() 원래 이벤트가 다음을 제거 .off()를 사용하여 설정이

$("#tabs .nav li a").on("click", function(){ 
    //do something 
    $("#tabs .nav li a").off('click'); 
}); 
0

: 만 제거하고 보장하기 위해

$("#tabs .nav li a").on("click.myIdentifier", function(){ 
    //do something 

    // unbind event from other elements: 
    $("#tabs .nav li a").off('click.myIdentifier'); 
}); 

참고 첨부 한 이벤트를 제거 할 때 항상 사용해야 여기에 추가 .myIndentifier, 당신이 원하는 이벤트; 즉. 유지하려는 제 3 자 플러그인에 의해 추가 된 이벤트가 아닙니다.

2

당신은 .on() 같이 이벤트 위임을 사용하고 부모에 바인딩 할 수 있습니다

$('#tabs').one('click', '.nav li a', function() { 
    // ... 
}); 

데모 : http://jsfiddle.net/hDfFu/

+1

니스! 이것은 잠재적으로 문제가 될 수 있습니다. * "[...] 핸들러는 위임 된 요소에서 이벤트가 처음 발생한 후 제거됩니다. ** 선택기가 아무 것도 아닌지 ** **": http : // api와 일치하는지 여부 .jquery.com/one /. '#tabs .nav' 요소가 여러 개있는 경우에도 원하는 결과를 얻을 수 없습니다. –

+0

@FelixKling : 내가 틀렸다고 정정하되, 클릭 된 요소가 부모 요소에서 트리거되면 클릭 한 요소가 선택자와 일치하지 않더라도 핸들러가 바인딩되지 않는다고 말하고 있습니까? 그렇다면, 나는 그런 일이 일어나지 않는 것 같습니다 : http://jsfiddle.net/hDfFu/1/ – Blender

+0

음, 재미 있습니다. 나는 그것을 테스트하지 않았으므로 문서가 최신 버전 일 것이라고 예상했다. 두 번째 발언 (내가 편집 한 내용)은 여전히 ​​유효하지만 정보는 틀린 것처럼 보입니다. 그러나 일치가 더 이상 문제가되지 않으면 처리기를 본문에 바인딩 할 수 있습니다. –

0

는 말에

$("#tabs .nav li a").unbind('click'); 

퍼팅 시도 기능.

관련 문제