2012-09-14 2 views
1

이미지에 링크가 있고 여기에 클릭 및 드래그 가능한 처리기가 연결되어 있습니다.일시적으로 처리기를 비활성화 할 수 있습니까?

링크 (예 : 드래그 한 경우)를 이동하면 클릭 핸들러를 사용하지 않도록 설정하고 싶습니다.

다시 활성화하면 클릭 한 후 얻을 수 있습니다.

어떻게하면됩니까? .unbind ... 내 생각, 전체 핸들러를 제거합니다

+1

바이올린을 게시 할 수 있습니까? 바인딩을 해제 할 필요는 없으며 조건부로 preventDefault를 호출하거나 false를 반환 할 수 있습니다. 그러나 코드를 보지 않고 말하기위한 실질적인 방법은 없습니다. –

+0

preventDefault는 현재 함수가 멈추는 것을 멈추지 않고, 단지 이벤트가 버블 링하는 것을 막습니다. api.jquery.com/event.preventDefault 참조 false 반환 :-) 내 대답을 참조 – Flater

+0

이 시나리오입니다 : http : // jsfiddle.net/Wrevr/2/(미안, jiddle UI를 피들에 추가 할 수 없음) – markzzz

답변

1

뜻한다면 드래그하는 동안 앵커 클릭 이벤트가 간섭하지 않도록하고 링크/앵커 태그의 모든 클릭 이벤트를 캡처하여 드래그에 이벤트를 중지, 뭔가 같은 :

var cancelFollow = false; 
$(function(){ 

    $("anchorElement").click(function(e){ 
    e.stopPropagation(); 
    if (cancelFollow) 
    { 
     cancelFollow = false; 
     return false; 
    } 
    return true; 
    }); 

    $("imageElement").draggable({ 
    .... 
    start: function(e, ui){}, 

    stop: function(e, ui){  
     cancelFollow = true; 

    } 
    }); 
}); 
1
// bind it 
$('#id').on('click', click_handler); 

// unbind it 
$('#id').off('click', click_handler); 

// bind it again 
$('#id').on('click', click_handler); 
1

당신은 사용할 수 있습니다

.unbind('click') 당신이 .bind()

또는 사용하는 경우 : 당신이 .on()

를 사용한 경우

.off('click')

그렇지 않으면 예외를 추가 할 수 있습니다 :

$('a').click(function(e) { 
    if (...) { 
     e.preventDefault(); 
    } 
}); 

편집 :

것은 당신이 내가 JsFiddle

+1

preventDefault는 현재 함수가 멈추는 것을 멈추지 않고, 이벤트가 버블 링하는 것을 멈 춥니 다. http://api.jquery.com/event.preventDefault/ – Flater

+0

또한 jQuery-ui에 관심이 있다면 드래그 가능한 솔루션을 추가했습니다. –

0

대신했던이 솔루션에 관심이있을 수있는 경우는, 링크에 어떤 정지 핸들러없이 잘 작동 jQuery를-UI를 사용하여 바인드 해제하고 핸들러를 리 바인드하면 killswitch로 작동하는 전역 변수 (부울)를 구현하는 것이 더 읽기 쉬울 것이라고 생각합니다.

나는 당신의 질문에는 코드 그래서 난 그냥 무작위 예를 게시하지 것이다 참조 : 당신이 정말로 일어나는 이벤트를 중지 할 때마다

var doNotExecute = false; 

$(".myClassItem").click(function() { 

    if(doNotExecute) return false;; 

    //Now do your normal processing. 

}); 

지금 당신이 doNotExecute true에 설정할 수있는 옵션이 있습니다. 그 후에 다시 false으로 다시 설정해야합니다. :-)

0

글로벌 범위에 핸들러를 만듭니다 .. 클릭은 드래그 액션을 트리거 할 수 없습니다 ... 이를 고려하면, 나에게 가장 좋은 방법은 이벤트를 사용하는 것 바인딩 해제 이벤트를 막기위한 위임

$('#container').on('click', 'ATagClass', handler(e){/* ... */}); 

핸들러 내부에서 클래스 또는 속성을 검사하여 e.target이 태그인지 확인해야합니다. #container가 항상 태그의 조상이되는지 확인해야합니다.

관련 문제