keyup只能工作一次

时间:2012-07-11 22:03:55

标签: javascript jquery

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

当我在文本框(#hi)中输入“Hello”时,keyup仅适用于第一个字母,然后它不会消失。

3 个答案:

答案 0 :(得分: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/

这里的想法是你设置一个超时,以便在击键后一秒钟删除“Writing ...”文本。如果在该秒内进行了新的键击,则清除先前的超时并设置新的超时。这样,只有当用户停止输入超过一秒钟时,才会删除该文本。

答案 1 :(得分:3)

您通过不调用next

来屏蔽queue
  

从jQuery 1.4开始,被调用的函数被传递给另一个函数   作为第一个参数。调用时,这会自动完成   使下一个项目出列并使队列保持移动。我们用它作为   如下:

$("#test").queue(function(next) {
    // Do some stuff...
    next();
});

答案 2 :(得分:0)

我不太确定为什么会有所帮助,但清除队列会产生你期望的结果

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

fiddle

相关问题