0

所以我有3个角色和一个秘密角色。秘密字符应该是 .chosen 字符。到目前为止一切都很好。但是,我正在尝试显示一个警报,但只有当3秒已经过3秒以便在秘密字符div中传递时。目前,快速按下按键(其中秘密字符包含所选字符少于 3 秒)会触发警报。

<div id="peter" class="chosen">peter</div>
<div id="louis">louis</div>
<div id="stewie">stewie</div>

<br><br>
<div id="secret-character"></div>

jQuery:

$(document).keydown(function(e){
if(e.keyCode==38||e.keyCode==40) {
    var prev = $('.chosen').prev();
    var next = $('.chosen').next();

    if(e.keyCode==38){
        $('.chosen').removeClass('chosen'); prev.addClass('chosen');
    }    
    if(e.keyCode==40){
        $('.chosen').removeClass('chosen'); next.addClass('chosen');
    }  

    var timeoutID = null;    

    clearTimeout(timeoutID);
    timeoutID = setTimeout(function() {alert('3 secs secret character!')}, 3e3);


    $('#secret-character').html('Secret Character:'+$('.chosen').html()+'!');                             
}
});

任何帮助表示赞赏。这是小提琴:http: //jsfiddle.net/58MJ3/

4

1 回答 1

2

每次您的 keydown 处理程序运行时,您都将局部变量设置timeoutIDnull

var timeoutID = null;    

然后你清除那个空计时器并开始一个新的:

timeoutID = setTimeout(function() {alert('3 secs secret character!')}, 3e3);

但是当回调完成执行时,timeoutID它就消失了,因为timeoutID它是一个局部变量。

我认为您想清除以前的计时器,因此timeoutID需要在调用处理程序之间保留。也许你想要这个:

var timeoutID = null;
$(document).keydown(function(e) {
    // As before except no `var timeoutID = null` in here...
});

演示:http: //jsfiddle.net/ambiguous/AjaAb/

于 2012-06-03T23:20:58.250 回答