<html>
<head>
<script src="jquery-1.9.0.min.js" type="text/javascript"></script>
</head>
<body>
<input id="input" type="text"/>
<script>
//setup before functions
var typingTimer; //timer identifier
var doneTypingInterval = 5000; //time in ms, 5 second for example
//on keyup, start the countdown
$('#input').keyup(function(){
typingTimer = setTimeout(doneTyping(), doneTypingInterval);
});
//on keydown, clear the countdown
$('#input').keydown(function(){
clearTimeout(typingTimer);
});
//user is "finished typing," do something
function doneTyping () {
alert("123") // I get this alert immidiatelly when typing, but not after 5 sec dalay
}
</script>
</body>
質問する
102 次
1 に答える
6
関数をすぐに呼び出して、その結果 (未定義) を に渡しますsetTimeout()
。に関数参照を渡す必要がありsetTimeout()
ます。この場合、 の後の括弧を削除して行いますdoneTyping
。
typingTimer = setTimeout(doneTyping, doneTypingInterval);
または(あなたの例には当てはまりませんが、将来の参考のために)、いくつかの引数で関数を呼び出す必要がある場合、たとえばdoneTyping('test')
、指定された間隔の後に呼び出したい場合は、それを無名関数式でラップできます。
typingTimer = setTimeout(function() { doneTyping('test'); }, doneTypingInterval);
PSあなたが求めていることに間接的に関連していますが、 をハンドラーの直前に移動clearTimeout()
し、このようなハンドラーを削除することもお勧めします。大文字のシーケンスは、(1) シフトダウン (2) 文字ダウン (3) 文字アップ (4) シフトアップです。また、Shift キーを使用しなくても、すばやく入力すると、次の文字を入力する前にキーを完全に離していないことがよくあります。そのため、対応するイベントの前に複数のイベントが連続して発生します。通常、これは顕著な悪影響はありません。ただし、ダウン イベントとアップ イベントの両方に応答するコードがある場合は顕著です。keyup
setTimeout()
keydown
keydown
keyup
于 2013-07-13T12:10:14.377 に答える