2011-02-02 7 views
4

특정 요소에 다시 클릭 이벤트를 추가하는 것보다 제거 할 수 있습니까? 즉Jquery 제거 및 다시 클릭 이벤트

내가 가지고 $("#elem").click(function{//some behaviour});, $(".elem").click(function{//some behaviour}); (1 개 이상의 요소가 있습니다) 동안 내 다른 기능 getJson 나는 #elem에서 클릭 이벤트를 제거하고 다시해서 getJSON 함수에서 onsuccess는 추가 할 실행, 그러나 mouseenter와 mouseleave 이벤트는 계속 유지됩니까?

또는 모달 창 에서처럼 클릭을 방지하기 위해 오버레이를 만들 수 있습니까? 그게 더 좋은 생각이야?

편집 : 나는 정말 좋은 답변을 본 적이 있지만 나는 일부러하지 생략하는 것이 하나 개의 세부 사항이

. 요소가 두 개 이상 있습니다. 원래 질문에 명시된대로 elementId에없는 className의 click 함수를 호출합니다.

+0

이벤트 핸들러 내의 초기 if 문은 부울'jsonIsLoaded'가 true인지 여부를 확인할 수 있습니다. 그렇다면'false'로 설정하고 계속하십시오. 그렇지 않으면'event.preventDefault()'를 호출하고 false를 반환합니다. 그렇게하면 항상 이벤트를 바인딩하거나 바인딩 해제 할 필요가 없습니다! –

+0

@afEkenholm niceeee – London

+0

'function' 다음에 괄호 세트가 와야하며 선택적으로 매개 변수로 click 이벤트를 수신해야합니다 : function (evt) {...}'. 업데이트 정보 : _all_ 요소를 클릭 취소 할 수 없거나 클릭 한 요소 만 클릭해야합니까? –

답변

6

오히려 unbind()를 사용하는 것보다, 의미 당신은 당신이 당신의 요소가 모든 AJAX 요청시 click 이벤트를 무시해야하는 ajaxStartajaxStop 이벤트와 jQuery의 data() 기능을 사용할 수 있으며, 동일한 이벤트 핸들러 나중에 다시 바인딩해야합니다 :

$(".elem").click(function() { 
    if (!$(this).data("ajaxRequestPending")) { 
     // some behaviour 
    } 
}).ajaxStart(function() { 
    $(this).data("ajaxRequestPending", true); 
}).ajaxStop(function() { 
    $(this).removeData("ajaxRequestPending"); 
}); 

편집 :이 답변은 또한 ID-에 급 방지 (질문자의 편집 참조), 모든 선택기 일치하기 때문에하는 것은 처리합니다 올바른 AJAX 이벤트. 그것이 jQuery의 주요 판매 포인트이며, 이것이 보여줍니다.

+0

@ Frédéric Hamidi하지만 아약스 함수를 사용하지 않고 있습니다. jquery에서도 getJson을 사용하고 있으며, 아약스 함수로 속해 있습니까? – London

+0

@London, [$ .getJSON()] (http://api.jquery.com/jQuery.getJSON/)은 [$ .ajax()]를 호출합니다. (http://api.jquery.com/jQuery.ajax/) 내부적으로, 실제로 * AJAX 함수이며'ajaxStart'와'ajaxStop'을 예상대로 트리거합니다. –

+0

@ Frédéric Hamidi 괜찮음 :) 한번 시도해 보겠습니다.tnx – London

2

찾고 계시는 분은 .unbind()입니다. 'click'을 전달하면 클릭 이벤트가 삭제됩니다.

나는 당신의 getJSON 직전에 넣고 아약스 호출의 성공 처리기 안에 클릭 이벤트를 다시 바인딩합니다.

0

클릭 이벤트를 바인딩 해제/바인딩하는 대신 다른 변수의 상태를 확인하여 작업을 수행해야하는지 확인할 수 있습니다.

var MyObject = { 
    requestActive = false; 
}; 

function MyJsonFunction() { 
    // when requesting 
    MyObject.requestActive = true; 
    //... 
    // when request over 
    MyObject.requestActive = false; 

} 

$("#elem").click(function{ 
    if (MyObject.requestActive == true) { 
    //do something 
    } 
}); 
관련 문제