2017-04-15 2 views
0

그래서 제대로 작동하는 EventListener가있는 div가 있습니다. 하지만 EventListener가 특정 지점에서만 트리거되기를 원합니다. 그래서 if 문을 추가했습니다.addEventListener가 올바르게 작동하지 않습니다.

나는 내 코드가 아래에있는 것과 같은 방식으로 함수에서 전역 변수를 변경할 수 있다는 인상하에 있었지만 전혀 작동하지 않는 것 같습니다. 나는 window.clickDisable = false;의 방법으로 함수 내에서 변수를 변경해 보았지만 그 중 하나는 작동하지 않습니다. 코드의 관련 부분은 아래에 있습니다. 왜 이것이 작동하지 않는지 아무도 모르십니까? 감사.

var clickDisable = true; 

if (clickDisable == false) { 
    document.getElementById("fight") 
    var fightMenu = fight.addEventListener("click", fightMenuFunction) 
} 

function fightMenuFunction() { 

} 

setTimeout(introAnimation, 7000) 
    function introAnimation() { 
    clickDisable = false; 
} 
+0

귀하의'clickDisable' 변수

var clickDisable = true; function fightMenuFunction() { if(!clickDisable){ console.log('This is the function running.') } } fight.addEventListener("click", fightMenuFunction) window.setTimeout(introAnimation, 7000) function introAnimation() { clickDisable = false; }
<button id="fight">Fight</button>

는 이벤트 리스너를 추가 중지, 더 나은 장소는 이벤트 리스너 – Icepickle

+0

다시 호출되지 없구요 코드 내부에 추가 할 수 있습니다. 7 초 후에 eventListener를 추가해야합니다. 또한이 예제에서는 싸움이 정의되어 있지 않습니다. – dejakob

+1

이와 같은 전역 변수를 변경할 수 있지만, 이전에 거짓이었던 명령문이 새로운 값으로 마술처럼 다시 실행되지 않는 경우. – JJJ

답변

2

은 당신의 코드에 문제가 소수가 있습니다 나는 가장 좋은 방법은 함수의 본문 내에서 if 문을 넣어 생각합니다. 타이머가 경과 된 경우에만 바인딩 할 이벤트가 아닌 타이머가 경과 한 경우에만 함수 본문이 실행되기를 원합니다.

또한 document.getElementById가 사용되지 않았습니다. 대신 요소 ID가 자동으로 전역 변수로 해석된다는 사실로부터 이익을 얻었습니다. 아래에서 수행 했으므로 수행 할 수 있지만 아마도 모범 사례는 아닙니다.

관련 문제