2012-06-03 58 views
0

所以我有3個字符和一個祕密字符。祕密角色應該是。選擇角色。一切都很好,迄今。但是,我試圖顯示一個警報,但只有當祕密字符div中的選定字符已經過去3秒時。此時,快速按下按鍵(祕密角色包含所選角色的時間少於3秒)會觸發警報。jQuery的 - setTimout div的持有內容超過x秒

<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/

+0

你好,對不起,如果我聽起來有點厚:))那麼究竟什麼是你想要的輸出?內容應該在3秒以上可見?我可能能夠幫助你,謝謝 –

+0

@Tats_innit不用擔心:)我只希望當祕密角色div有3秒的角色名稱時發生警報。 – Wonka

回答

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/

+0

這麼近:)當你想像這樣的小事情時,更喜歡編程。謝謝畝! – Wonka

+0

@Wonka:我知道所有這些事情都來自制作相同的mistaeks :) –