2
$("#hi").keypress(function() {
    $(".hi").html("Writing...");
});
$('#hi').keyup(function() {
    $(".hi").delay(1000).queue(function() {
        $(this).html("");
    });
});

テキストボックス (#hi) に「Hello」のように入力すると、キーアップは最初の文字に対してのみ機能し、その後は消えません。

4

3 に答える 3

3

遅延の代わりにタイムアウトを使用できます。

var timeout;
$("#hi").keypress(function() {
    // Clear any previous timeout
    clearTimeout(timeout);

    // Apply the writing text
    $(".hi").html("Writing...");

    // Remove the text after one second if no more key is pressed until then
    timeout = setTimeout(function () {
       $(".hi").html("");
    }, 1000);
});​

これが実際の例です: http://jsfiddle.net/tF7DH/1/

ここでの考え方は、タイムアウトを設定して、キー ストロークの 1 秒後に "Writing..." テキストを削除することです。その秒以内に新しいキー ストロークが行われると、以前のタイムアウトがクリアされ、新しいタイムアウトが設定されます。これにより、ユーザーが 1 秒以上入力を停止した場合にのみ、テキストが削除されます。

于 2012-07-11T22:09:21.153 に答える
3

呼び出さないことでキューをブロックしていますnext

jQuery 1.4 の時点で、呼び出された関数には、最初の引数として別の関数が渡されます。呼び出されると、これは自動的に次のアイテムをデキューし、キューを動かし続けます。次のように使用します。

$("#test").queue(function(next) {
    // Do some stuff...
    next();
});
于 2012-07-11T22:18:18.563 に答える
0

なぜそれが役立つのかはよくわかりませんが、キューをクリアすると期待どおりの結果が得られます

$('#hi').keyup(function() {
    console.log("keyup");
    $(".hi").delay(1000).queue(function() {
        console.log("erase");
        $(this).html("").clearQueue();
    })
});​

フィドル

于 2012-07-11T22:15:07.977 に答える