2016-08-21 7 views
-1

私はユーザー入力に対して何らかの処理を行うプログラムを作成しました。しかし、ユーザーの入力として入力を処理する代わりに、ユーザーが入力を停止した後に1秒間処理されることを望みます。 setTimeoutが正しく動作しません

は私が のsetTimeout()を使用してみましたが、これは私が直面してる問題です:

1) 私は引用符で囲まれた関数名を書くとき、それは指定した時間後に動作します。

コード:

function test_function(input, data) { 

$('#write_on_me').keyup(function() { 
clearTimeout(timer); 
    timer = setTimeout("console.log('do something')", 1000); 
}); 

$('#write_on_me').keydown(function() { 
     clearTimeout(timer); 
     console.log('clear timer'); 
}); 

} 

test_function($('#write_on_me')); 

jsFiddle

2)私は引用符なしで関数を書くとき、私はタイプとして、それは処理を続けています。

コード:

function test_function(input, data) { 

$('#write_on_me').keyup(function() { 
clearTimeout(timer); 
    timer = setTimeout(console.log('do something'), 1000); 
}); 

$('#write_on_me').keydown(function() { 
     clearTimeout(timer); 
     console.log('clear timer'); 
}); 

} 

test_function($('#write_on_me')); 

jsFiddle

注: それは無名関数の中に囲まれ、「を与えているとして、処理は引用符で呼び出すことはできませんん、実際の機能Uncaught ReferenceError:関数が定義されていません "引用符でコールされた場合はエラーとなります。

すべてのヘルプは、この行は

答えて

3

:)いただければ幸いです。

timer = setTimeout(console.log('do something'), 1000); 

通話console.log('do something')とちょうどfoo(bar())通話barのように、setTimeoutにその戻り値を渡し、にその戻り値を渡しますfoo。代わりに

、そこに関数のリファレンスを渡す:

timer = setTimeout(function() { 
    console.log('do something'); 
}, 1000); 

あなたの「その他の機能」とは、その引数を使用していない場合は、あなただけの直接それを参照することができます

timer = setTimeout(otherFunctionName, 1000); 

それならば引数を使用します。上記のように匿名ラッパーを使用するか、Function#bindを参照してください。

関連する問題