2012-01-23 53 views
1

我有一個div每x秒左右刷新一次。在這個div裏我有一個textarea。我想要做的是,如果用戶開始輸入這個textarea,然後不刷新div,否則,保持刷新。檢測用戶在textarea中輸入,停止div刷新,JQUERY

這是用來檢測textarea中的keydown的JS,我遇到的問題是它在textarea laggy中輸入,因爲JS爲每個擊鍵都繼續運行。我怎麼能只做這個運行一次?

<script type="text/javascript"> 
$("#comment_textarea").live('keydown', function() { 
    $('form #comment_textarea').elastic(); 
    clearInterval(auto_refresh); auto_refresh = 0; 
}); 
</script> 

回答

1

這是最有可能的elastic插件你打電話,是因爲結算的間隔每次擊鍵不應造成很多(如果有的話)滯後。

如果elastic插件的東西,改變textarea當用戶關注的焦點的輸入元素,那麼你可以將它綁定到focus事件代替它不會運行每次擊鍵:

<script type="text/javascript"> 
$(document).delegate("#comment_textarea", "keydown", function() { 
    clearInterval(auto_refresh); 
    auto_refresh = 0; 
}).delegate("#comment_textarea", "focus", function() { 
    $('#comment_textarea').elastic(); 
}); 
</script> 

通知我使用.delegate()而不是.live().delegate()允許您選擇除document以外的根元素。

如果您需要在您的​​事件處理程序內的elastic插件調用或仍然有滯後的問題,你可以隨時檢查auto_refresh變量的值:

if (auto_refresh !== 0) { 
    clearInterval(auto_refresh); 
    auto_refresh = 0; 
} 

此代碼會去你的​​事件中處理程序。

+0

很好的答案。現在有道理。謝謝賈斯帕。 – DanielOlivasJr