2012-12-02 6 views
1

첫 만지기 후에 touchevent를 제거하려고합니다.
나는 다음 코드를 시도했지만 작동하지 않았다js에서 touchevent을 제거하는 방법?

ourCanvas.addEventListener("touchstart", function(){ 
    evt.preventDefault(); 
    startGame(); 
    ourGameCanvas.removeEventListener("touchstart"); 
}, false);` 

답변

2

당신은 removeEventListener에 원래의 함수에 대한 참조를 전달해야

ourCanvas.addEventListener("touchstart", function funcref(evt) { 
    evt.preventDefault(); 
    startGame(); 
    ourCanvas.removeEventListener("touchstart", funcref, false); 
}, false);

를 이전 코드에서 나는 설정 명명 된 함수 표현식 (funcref)의 익명 함수 표현식으로 나중에 함수 내에서 사용할 수 있습니다.

그리고 ourGameCanvas의 이름을 ourCanvas으로 변경했습니다. 이벤트 리스너는 요소, 이벤트 이름, 함수 참조 useCapture 플래그가 addEventListener에서 사용되는 플래그와 동일한 경우에만 제거 할 수 있습니다.

+0

멋지다. 고맙다. – Solieman

1

removeEventListener 방법은 즉 ... addEventListener 방법과 동일한 인수를 기대 :

document.body.addEventListener('touchstart',function touchStartHandler(e) 
{//use named function 
    document.body.removeEventListener('touchstart',touchStartHandler, flase); 
},false); 

같은이 attachEventdetachEvent 간다 (당신이 IE < 9를 지원하기 위해 코딩하는 경우도)

+0

이 예제는 작동하지 않는다. 왜냐하면'touchStartHandler'는 ** 함수 선언 **이 아니고 ** 함수 선언 ** 이니까. 따라서 명명 된 함수는 'touchStartHandler' 함수 범위 밖에서 사용할 수 없습니다. (참고 : 캔버스 및 터치 이벤트는 IE8에서 지원되지 않으므로 'attachEvent'에 대해 걱정하지 마십시오.) –

+0

@RobW 캔버스와 터치 이벤트가 IE8에서 지원되지 않는다는 것을 알고 있습니다. OP가 비 터치 장치 또는 무언가에 대한 클릭 이벤트를 위임 할 경우를 대비하여. 함수 참조에 대해서는 당연한 것입니다. 제가 제공 한 스 니펫은 혼란스럽고 잘못된 것입니다. –

관련 문제