2012-07-01 3 views
0

나는 겉보기에 간단한 질문을 가지고 있지만, 내가 잘못 가고있는 부분을 파악할 수는없는 것 같습니다. 나의 기술은 도조에서 부족하다는 것을 알기 때문에 내 순결을 변명하십시오. 나는 슬쩍클릭 이벤트에 응답 할 DOM의 요소를 가지고 : 나는를 달성하기 위해 노력하고있어Dojo 스 와이프 제스처가 버블 링하는 것을 방지하는 방법은 무엇입니까?

. 그러나 swipe.end 이벤트가 트리거되면 click 이벤트도 발생합니다. 나는 이벤트의 버블 링을 막으려 고 노력했다. (이 경우 이벤트가 버블 링되고 있다고 가정하고있다.) stopPropagation을 호출하고 이벤트에 대해 event.stop을 호출한다. 아무 소용이 없다. 아래에서 코드 스 니펫을 보거나 working fiddle을 확인할 수 있습니다.

HTML

<div id='testSwipe'>Swipe Me</div>​ 

JS이 예에서

require({ 
}, [ 
    'dojo/dom', 
    'dojox/gesture/swipe', 
    'dojo/on', 
    'dojo/_base/event' 
], function(dom, swipe, on, event) { 
    var div = dom.byId('testSwipe'); 

    on(div, swipe.end, function(e) { 
     console.log("### SWIPE"); 

     e.stopPropagation(); // Click event still fires 
     event.stop(e); // Click event STILL fires 
    }); 

    on(div, 'click', function(e) { 
     console.log("### CLICK"); 
    }); 
}); 

, 다음과 같은 출력의 원인이됩니다 이벤트 강타 :

### SWIPE 
### CLICK 

어떤 제안?

답변

0

문제는 서로 다른 두 가지 이벤트가 해고되고있다 : event 슬쩍에 대한 (event.type == 'swipe' 포함) 및 클릭에 대한 mouseEvent. 이벤트가 끊이지 않습니다.

원하는 것을 얻는 한 가지 방법은 swipe.end 이벤트가 방금 발생한 경우 클릭 이벤트를 차단하는 것입니다. 해킹 비트처럼 느껴지지만 작동합니다. updated JSFiddle을 참조하십시오.

참고 사항 : 버블 링을 방지하기 위해 도장 방법은 을 the docs으로 사용하는 것입니다. 나는 이것을 시도했지만 예상대로 아무런 효과가 없었다.

0

클릭 이벤트는 요소를 클릭 할 때 항상 실행됩니다. 대신에 클릭 이벤트를 사용하면 dojox/gesture/tap

on(div, tap, function(e) { 
    console.log("### CLICK"); 
}); 

fiddle

업데이트 사용하여 탭 제스처를 사용할 수 있습니다
관련 문제