JavaScript函数太快

JavaScript函数太快,javascript,javascript-events,Javascript,Javascript Events,我是JavaScript新手,我试图对少量数据执行搜索功能 我有下一个HTML代码: <form name="f1"> <input type="text" name="sbox" onkeydown=keysearch(event)> <button type="button" onclick=search()></button> </form> 我有一些找不到的问题。事实上,第二个函数也可以工作,但是它太快了,所以

我是JavaScript新手,我试图对少量数据执行搜索功能

我有下一个HTML代码:

<form name="f1">
    <input type="text" name="sbox" onkeydown=keysearch(event)>
    <button type="button" onclick=search()></button>
</form>
我有一些找不到的问题。事实上,第二个函数也可以工作,但是它太快了,所以我可以在不到一秒钟的时间内看到它的结果,然后所有的东西都回到它们的位置

请。。。有什么想法吗

多谢各位


在此之前,我会对这个搜索框进行“即时搜索”,所以如果你有一些想法。。。再次感谢您。

我尝试了您的代码,它似乎有效,但有一个例外。当在输入字段中按enter键并注册键代码13时,您还将调用表单的默认操作。也就是用http请求发布表单。因此,您的页面将重新加载,使javascript变得无用。它会弹出一秒钟。然后在重新加载时消失

var keycheckTimeout;
function keysearch(e) {
    var charCode

    if( e && e.which ) {
        charCode = e.which
    } else if( window.event ) {
        e = window.event
        charCode = e.keyCode
    }

    if( charCode == 13 ) {
        clearTimeout( keycheckTimeout );
        keycheckTimeout = setTimeout( function() { search(); }, 1000 );
    }
}
尝试在提交表单时返回false,如下所示

<form name="f1" onsubmit="return false;">

这是一个非常简单的方法来防止它,它仍然可以在禁用javascript的情况下工作,因为实际操作将运行

如果您感兴趣的话,也可以使用jQuery实现这一点


未设置动作的表单格式不正确。在某些浏览器中,如果您忽略了这一点,则按Enter键刷新页面。你的情况就是这样

改变

<form name="f1">



另请参见此

不确定您的问题,但您可以通过console.log函数调用跟踪代码进度。它确实有助于快速调试。因此,您是否希望使“自动完成”功能在按键延迟一段时间后工作?听起来您的页面再次加载。在
input:text
上点击
ENTER
时,IE至少会提交一份
表格。要防止这种情况,您需要防止默认操作,在(旧版)IE中,默认操作由
event.cancelBubble=true完成;event.returnValue=false。与您的问题无关,但请注意不要在for循环中使用全局变量,如i。例如,如果在另一个For循环中使用相同的i调用另一个函数,那么您将遇到一个难以调试的坏问题。您的解决方案也可以工作,并且也可以使用另一个答案上的解决方案来完成,即add onKeyPress=“if(event.which==13)return false;”)谢谢;)
var keycheckTimeout;
function keysearch(e) {
    var charCode

    if( e && e.which ) {
        charCode = e.which
    } else if( window.event ) {
        e = window.event
        charCode = e.keyCode
    }

    if( charCode == 13 ) {
        clearTimeout( keycheckTimeout );
        keycheckTimeout = setTimeout( function() { search(); }, 1000 );
    }
}
<form name="f1" onsubmit="return false;">
<form name="f1">
<form name="f1" action="javascript:void(0);">