2012-07-18 226 views
0

我有這樣的代碼延遲上(「點擊」)事件

$("input").on('keyup', function() { 
$("block"),slideDown("slow")...... 

問題是taht當我寫的快速塊將再次和比我寫的阿恩慢得多做了「動漫」

有沒有另一個事件可以用來在代碼完成後運行代碼?我們可以說,我停止編寫代碼,然後執行代碼500ms,然後執行代碼。

+0

你能不能用時,'input'失去焦點,並且其值發生了變化,這將觸發'change'事件? – 2012-07-18 10:06:57

回答

0

像這樣的事情是我用什麼之前:

$(input).keyup(onKeyUp); 

/** 
* Handler for the keyup event 
*/ 
function onKeyUp() { 
    //reset 
    clearTimeout(myTimer); 

    myTimer = setTimeout(otherFunction, 500); 
} 

現在otherFunction會在500毫秒之後被調用,但是每個keyup事件定時器將被重置。

+2

你不應該將字符串傳遞給'setTimeout';它使用'eval()'幕後**** ***!相反,只要'setTimeout(otherFunction,500);' – Matt 2012-07-18 10:12:28

+0

感謝提示馬特。總是善於學習新事物! – Jurgen 2012-07-18 10:17:33

1
function throttle(fn, time){ 
    var timer = 0; 
    return function() { 
     clearTimeout(timer); 
     timer = setTimeout($.proxy(fn, this), time); 
    }; 
} 

$("input").on('keyup', throttle(function() { 
    $("block").slideDown("slow") 
},500)); 

節氣門返回一個新函數,該函數在函數上次調用後經過500毫秒後調用舊函數。

0

嘗試使用...

function slideDown(){ 
    ... 
}  
// call 
setTimeout(function(){ slideDown(); }, 1000); 
+0

你剛剛遭受W3Schools的考驗:不要將字符串傳遞給'setTimeout'。而且,你的代碼只是延遲了這個功能 - 它並沒有考慮到「停止寫入」。 – pimvdb 2012-07-18 10:20:48