2009-09-04 6 views
23

こんにちは、再びウェブのマスター:) 今、私は新しいばかげた質問があり、私は私を許して欲しいです。私はこのソリューションについてどこでも読んでいましたが、私のために働くものは見つかりませんでした。OnKeyUp JavaScriptのタイムディレイ?

私が持っている:

<input name="domain" type="text" id="domain" onKeyUp="javascript:chk_me();"> 

は、私が求めていますすべてのボタンが押された後、これをチェックしないようにする方法ですが、キーボードの非アクティブ1000ミリ秒を言って後?

答えて

34

このお試しください:キーを押すたびに、タイムアウトが削除されます。このように

var timer; 
function chk_me(){ 
    clearTimeout(timer); 
    timer=setTimeout(function validate(){...},1000); 
} 

をそしてそのセットをもう一度。

+2

'varタイマー'は関数本体の外にある必要があると思います – Rodrigo

+0

タイマーは関数の外に設定する必要があります。答えを編集しました – mck89

+0

ありがとう!公正なマージンで多くのベストアンサー。 – Shog9

-2

のsetTimeout()ものであろう;)

<input name="domain" type="text" id="domain" onKeyUp="setTimeout('chk_me()',1000);"> 

link text

+0

これは' this'コンテキスト変数の値を保存しないであろう() '。また、コードを含む文字列を受け取って評価する 'setTimeout()'のバリエーションを使用することは、このシナリオでは無意味であり、すべてのシナリオでは面倒です。 – Shog9

+0

こんにちはBerzemus、お返事ありがとうございます。 私はこれをすべて試してみました。それは動作しますが、問題はそれがスクリプトの実行自体を遅らせることではないということです。 ... – Spoonk

16

グローバルずに別のアプローチ、:

var typewatch = function(){ 
    var timer = 0; 
    return function(callback, ms){ 
     clearTimeout (timer); 
     timer = setTimeout(callback, ms); 
    } 
}(); 

用途:

ではJavaScriptによるイベントの取り付け:

window.onload = function() { 
    document.getElementById('domain').onkeyup = function() { 
     typewatch(function(){alert('Time elapsed!');}, 1000); 
    }; 
}; 

またはインラインイベントハンドラ(あまりお勧めできませんを使用して)のように入力してください:

<input type="text" name="domain" id="domain" 
    onKeyUp="typewatch(function(){alert('Time elapsed!');}, 1000);"/> 

デモを試すhere

+1

どうしてタイプワッチはグローバルではないと思いますか? –

+1

はいtypewatchはグローバルですが、** timer **変数はグローバルスコープにはなく、typewatch関数によってのみアクセスできます。 – CMS

0

本当に便利な投稿です!

グローバルせずに別の方法を用いて機能特性: `chk_meを呼び出すとき

function chk_me(){ 
    if(typeof timer !== undefined){ 
    clearTimeout(this.timer); 
    } 
    this.timer=setTimeout(function validate(){validate(...)},1000); 
} 
関連する問題