2013-05-08 56 views
0

所以我有2個按鈕。jquery kill不需要的超時

按鈕a:是一個按鈕。 (#button1)

按鈕b:假提交按鈕。 (#right_r)

按鈕c:提交按鈕。 (#right)

默認情況下,按鈕A將顯示,並將單擊並顯示一個錯誤消息preventDefault()。

當我在按鈕的點擊,則設置一個超時8000,所以在8秒,它將與按鈕C.

更換按鈕B但問題是:

當用戶多次點擊按鈕A,它會設置很多超時。

我想要做的是,設置一個新的前殺死以前的超時,like stop it.

我的代碼:

$(document).ready(function() { 
    $("#right_r").click(function(event) { 
     event.preventDefault(); 
     $("#error").slideDown("slow"); 

     setTimeout(function() { 
      $("#error").slideUp("slow");  
     }, 1000); 
    }); 
    $("#button1").click(function() { 
     setTimeout(function() { 
      $("#right_r").hide(); 
      $("#right").show(); 
     }, 8000); 
    }); 
}); 

感謝。

回答

0

試試這個

var right_r_timeout = null, runelocus_timeout = null; 
$(document).ready(function() { 
    $("#right_r").click(function(event) { 
     event.preventDefault(); 
     $("#error").slideDown("slow"); 

     if (right_r_timeout != null) { 
      clearTimeout(right_r_timeout); 
      right_r_timeout = null; 
     } 
     right_r_timeout = setTimeout(function() { 
      $("#error").slideUp("slow"); 
     }, 1000); 
    }); 

    $("#runelocus").click(function() { 
     if (runelocus_timeout == null) { 
      clearTimeout(runelocus_timeout); 
      runelocus_timeout = null; 
     } 
     runelocus_timeout = setTimeout(function() { 
      $("#right_r").hide(); 
      $("#right").show(); 
      runelocus_timeout = null; 
     }, 8000); 
    }); 
}); 

看到https://developer.mozilla.org/en/docs/DOM/window.setTimeout

+0

它沒有工作,我想因爲JavaScript覆蓋變量right_r_timeout。 – user2363542 2013-05-08 18:36:07

+0

你能給一些html嗎? – pbaris 2013-05-08 19:23:04

0

如果使用的是內置的延遲的方法,這將是容易..

$("#error").stop(true,true).slideDown("slow").delay(1000).slideUp("slow") 

不過請注意.delay()只延遲動畫的方法和.queue倒是方法。

+0

是的,但是,錯誤會的工作,但新的按鈕將出現在客場,我希望它重置點擊超時,因此將需要它的另一個8秒鐘顯示按鈕C – user2363542 2013-05-08 18:27:55