2012-01-23 14 views
1

divは毎秒更新されます。このdiv内にはテキストエリアがあります。私がしようとしているのは、ユーザーがこのテキストエリアに入力を開始してからdivをリフレッシュしない場合です。それ以外の場合は、リフレッシュを続けます。テキストエリアの入力を検出し、divをリフレッシュから停止します。JQUERY

JSがテキストエリアのkeydownを検出するのは、JSがすべてのキーストロークで実行されているため、テキストエリアでタイピングが遅くなっているという問題です。どのように私はこれを一度だけ行うことができますか?

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

答えて

1

(もしあれば)の間隔をクリアし、すべてのキーストロークが遅れあまりを作成するべきではありませんので、それは、最も可能性の高いあなたが呼んでいるelasticプラグインです。

elasticプラグインは、それは各キーストロークを実行しないように、ユーザーフォーカスは、入力要素は、あなたが代わりにfocusイベントにバインドすることができたときにtextareaを変える何かの場合:

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

お知らせI .live()の代わりに.delegate()を使用してください。 .delegate()を使用すると、document以外のルート要素を選択できます。

あなた​​イベントハンドラ内elasticプラグインコールを持っている必要がありますか、まだあなたは常にauto_refresh変数の値を確認することができますラグの問題がある場合:このコードは、あなたの​​イベントの内側に行くだろう

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

をハンドラ。

+0

偉大な答えです。今は意味をなさないありがとうジャスパー。 – DanielOlivasJr

関連する問題