2012-04-06 4 views
0

키 명령 후에 "mouseactive"를 1 초 미만으로 설정하려고하는데 그 기간 내에 해당 키를 누르면 해당 동작을 취소하고 싶습니다. 그러나 나는 이것을하는 방법을 알아낼 수 없습니다. 이것은 ... 내가 무슨setTimeout 문제 지우기

$(window).keydown(function(e) { 
if (e.keyCode == 40) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     var t = setTimeout("mouseActive()",800); 
} else if (e.keyCode == 38) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     var t = setTimeout("mouseActive()",800); 
} 
}); 

function mouseActive() { 
mouseactive = true; 
} 

이다 그러나, 그것은 mouseactive 다시 true로 설정하지 않습니다 작동하지 않습니다 ... 내가 잘못 여기 사람이 말해 줄 수를 뭘하는지?

답변

2

편집 : 정리 된 중복 코드.

기타 수정 :var t$(document).ready을 포함하여 모든 폐쇄 외부에 정의되어 있는지 확인하십시오. 아래 참조,

var t = null; 

$(document).ready(function() { 
    //..below code except for var t = null 
}); 

처리기 외부에서 var t를 선언하십시오.

var t = null; 
$(window).keydown(function(e) { 
    e.preventDefault(); 

    if (e.keyCode == 40) { 
     mouseactive = false; 
    } else if (e.keyCode == 38) { 
     mouseactive = false; 
    } 

    if (t != null) clearTimeout(t); 
    t = setTimeout(mouseActive, 800); 
}); 

function mouseActive() { 
    mouseactive = true; 
} 
+0

문자열을'setTimeout'에 넘겨서는 안됩니다. 함수를 전달해야합니다. 문자열이 전달 될 때'eval'을 사용합니다. 't = setTimeout (mouseActive, 800);' –

+0

@Rocket mm .. 나는 방금 코드를 정리했다. 나는 정리하기 전에 나의 초기 게시물에 문자열로했다. –

+0

고마워, 그 트릭을 많이 주셔서 감사합니다. – Ian

1

당신이 "t"모든 시간을 재 선언하는이 시도 :

var t = null; 
$(window).keydown(function(e) { 
    if (e.keyCode == 40) { 
      e.preventDefault(); 
      mouseactive = false; 
      if(t != null) 
      { 
       clearTimeout(t); 
      } 
      t = setTimeout("mouseActive()",800); 
    } else if (e.keyCode == 38) { 
      e.preventDefault(); 
      mouseactive = false; 
      if(t != null) 
      { 
       clearTimeout(t); 
      } 
      t = setTimeout("mouseActive()",800); 
    } 
    }); 

    function mouseActive() { 
    mouseactive = true; 
    } 
+0

문자열을'setTimeout'에 넘겨서는 안됩니다. 함수를 전달해야합니다. 문자열이 전달 될 때'eval'을 사용합니다. 't = setTimeout (mouseActive, 800);' –

2

귀하의 문제는 t이 범위에서 함수가 실행되는 2 시간이되지 않는 것입니다. t을 전역 변수로 만들어야합니다.

var t; 

$(window).keydown(function(e) { 
if (e.keyCode == 40) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     t = setTimeout(mouseActive,800); 
} else if (e.keyCode == 38) { 
     e.preventDefault(); 
     mouseactive = false; 
     clearTimeout(t); 
     t = setTimeout(mouseActive,800); 
} 
}); 

function mouseActive() { 
mouseactive = true; 
} 

P. 문자열을 setTimeout으로 전달하지 말고 함수를 전달하십시오. 문자열을 전달할 때 eval을 사용합니다.

+0

"var"을 사용하지 않을 경우 이상하게도 전체가 손상됩니다 ... – Ian

+0

Nvm, 왜냐하면 전에 "var t"로 정의하지 않았기 때문입니다 . 감사합니다 – Ian

+0

당신을 환영합니다 :-) –