gpt4 book ai didi

javascript - 为什么 javascript 在输入时立即发送事件,而不是在 5 秒延迟后发送事件?

转载 作者:行者123 更新时间:2023-11-28 12:35:20 25 4
gpt4 key购买 nike

<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>

最佳答案

您立即调用该函数并将其结果(未定义)传递给 setTimeout()。您需要将函数引用传递给 setTimeout(),在本例中,您可以通过删除 doneTyping 之后的括号来实现:

typingTimer = setTimeout(doneTyping, doneTypingInterval);

或者(不适用于您的示例,但供将来引用),如果您需要调用带有某些参数的函数,假设您想在指定的时间间隔后调用 doneTyping('test'),您可以将其包装在匿名函数表达式中:

typingTimer = setTimeout(function() { doneTyping('test'); }, doneTypingInterval);

ONLINE DEMO

附注与您的要求间接相关,我建议还将 clearTimeout() 移至 keyup 处理程序中,就在 setTimeout() 之前,并删除 keydown 处理程序 something like this ,否则您可能会发现同时设置了两个或多个超时,因为输入大写字母的顺序是 (1) 下移 (2) 字母下移 (3) 字母上移 (4) 上移。此外,即使不使用 Shift 键,在快速打字时,我经常发现在输入下一个字母之前我还没有完全释放按键,因此我在相应的 之前连续收到多个 keydown 事件>keyup 事件 - 这在正常情况下没有明显的不良影响,但当有代码响应向下和向上事件时,就会很明显。

关于javascript - 为什么 javascript 在输入时立即发送事件,而不是在 5 秒延迟后发送事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com