2014-02-07 2 views
1

두 ID에 이벤트를 한 번에 바인딩합니다. 사실을 알기 위해 하나의 ID를 대상으로 이벤트 바인딩을 해제하는 방법이 있습니까?Jquery 이벤트 바인딩 해제

다음은 간단한 코드입니다. 하나의 이벤트는 AJAX 요청이 HTML 템플릿을 반환 한 후에 언 바운드/바인딩됩니다 ... 템플릿 'AA'가 렌더링되면 첫 번째 이벤트가 바인딩됩니다. 템플릿 'BB'가 렌더링되면 두 번째 스크립트가 바인딩됩니다.

//Template AA 
$('#container').off('dblclick', '#store, #compare_store'); 
$('#container').on('dblclick', '#store, #compare_store', function(){ 
    console.dir('test1'); 
}); 

//Template BB 
$('#container').off('dblclick', '#store'); //This does not unbind the event listed as above 
$('#container').on('dblclick', '#store', function(){ 
    console.dir('test2'); 
}); 

/* Console Output When double-clicking '#store': 
    test1 
    test2 
*/ 

'#store'요소를 두 번 클릭하면 두 이벤트가 모두 트리거됩니다. 원하는 효과는 두 번째 이벤트가 첫 번째 이벤트를 바인딩 해제하고 (#store 전용) 새 이벤트를 바인딩하는 것입니다.

각 ID를 개별적으로 바인딩하면 원하는 결과를 얻을 수 있다는 점을 알고 있습니다. 또한 클래스를 사용하면 작업을 수행한다는 것도 알고 있습니다.

미리 감사드립니다.

+0

는'off' 기능을 사용할 수 있습니까을'#store, #의 compare_store' ? 나는 그것이 당신이 원하는 것이 아니라는 것을 알고 있습니다. jquery가 이것을 기대한다면 그것은 궁금합니다. 솔직히 jquery가 어떻게 처리 할 지 모르겠다. 이벤트를 별도로 바인드해야 할 수도있다. – helion3

+0

사용 된 'off()'에 똑같은 선택기를 전달해야하므로 실제로 그렇게 할 수 없다. 'on()'에 이벤트를 바인드한다. 이벤트의 네임 스페이스를 지정할 수는 있지만 여전히 이벤트 핸들러의 절반을 제거 할 수 없기 때문에 도움이되지 않을 것입니다. – adeneo

+0

@ helion3 : "#store, #compare_store"를 사용하여 꺼짐을 사용하는 경우 축 어적으로 작동합니다. – ejc

답변

0

장에게 선택기를 off 메서드 호출이 on 선택 일치하도록 : 원래 선택에 대한 바인딩을 해제하는 경우

//Template AA 
$('#container').on('click', '#compare_store', function(){ 
    console.log("a", this); 
}).on('click', '#store', function(){ 
    console.log("b", this); 
}); 

//Template BB 
$('#container').off('click', '#store'); //This does not unbind the event listed as above 

http://jsfiddle.net/xzgnH/

관련 문제