为什么javascript在输入时立即发送事件,而不是在5秒延迟后发送
Why javascript sends event immidiatelly when typing but not after 5 sec delay?
<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);
在线演示
附言:与您的要求直接相关,我建议也将clearTimeout()
移到keyup
处理程序中,就在setTimeout()
之前,并删除keydown
处理程序,诸如此类,否则您可能会发现一次设置了两个或多个超时,因为要键入大写字母,顺序是(1)下移(2)下移(3)上移(4)上移。此外,即使不使用shift键,当我快速键入时,我经常发现在键入下一个字母之前我还没有完全释放一个键,所以在相应的keyup
事件之前,我会连续收到多个keydown
事件-这在正常情况下没有明显的坏影响,但当代码同时响应向下和向上事件时,这一点会很明显。
相关文章:
- 在单击下一个按钮之前,在JavaScript代码中添加5秒的延迟
- 使用JQueryMobile时加载页面延迟2-3秒
- 在jQuery脚本中放置15秒的延迟
- 在菜单下拉条上应用2秒延迟
- 我们如何在下拉子菜单中设置5秒的时间或延迟
- 您如何使其延迟并且直到 16 秒过去时才显示
- 如何使用 JQuery 添加延迟?(让它等待 5 秒再继续)
- 如何延迟 AJAX 响应秒数
- JS自动播放,但有5秒的延迟
- 延迟循环 1 秒
- 我将如何为隐藏 JavaScript 函数添加 1 秒的延迟
- 通过 jquery 在 2 秒后延迟显示
- 如何为该函数添加3秒延迟
- 为什么javascript在输入时立即发送事件,而不是在5秒延迟后发送
- 我如何添加3秒延迟到这个函数
- Javascript在菜单项上没有延迟,但是悬停离开菜单时有5秒延迟
- 显示前的几秒延迟:无
- 显示/隐藏图像按钮3秒延迟
- Javascript DOMContentLoaded有一个神秘的5-10秒延迟
- 仅当鼠标悬停在 1 秒延迟后时显示图像预览