如果带有键盘触发器的字段出现错误,如何停止AJAX调用

我有这个jquery ajax调用,它是keyup上的触发器。 如果用户快速输入击键,它具有error handling(对于例如Firefox)被触发多次。 有没有一种快速方法可以停止显示多个警报窗口?

 $('input[name$="_LOC"]').keyup(function(){ if ($(this).val().length >=4){ $.ajax({ type: 'POST', url: 'red.asp?q='+$(this).val(), beforeSend: function() { [...] }, success: function(data) { [...] }, error: function() { alert("Oops!") } }); } }); 

每次触发onkeyup时重新启动计时器,这意味着事件仅在用户完成键入时发生(或者,至少暂停一秒钟或其他任何事情)。

使用timer = setTimeout(yourFunction, yourDelay);

rest计时器用户clearInterval(timer)并再次启动setTimeout。

 var typing = false; var timer; $('input[name$="_LOC"]').keyup(function(){ if(typing) { clearInterval(timer); } timer = setTimeout(sendAjax, 500, [this]); typing=true; }); function sendAjax(element) { if ($(element).val().length >=4){ $.ajax({ type: 'POST', url: 'red.asp?q='+$(element).val(), beforeSend: function() { [...] }, success: function(data) { [...] }, error: function() { alert("Oops!") } }); typing = false; } 

这是JSFiddle的例子: http : //jsfiddle.net/X8US5/ ,你需要你的浏览器console.log查看器准备好看东西(否则编辑console.logs是警报,虽然他们打断JS所以时间会关闭)

编辑: IE9兼容(黑客)版本http://jsfiddle.net/5ndM5/1/试图找到一个jQuery替代但似乎没有。 如果你不想要全局var,那么重写函数替代是好的,但是如果你只打算在一个表单上使用这个代码那么全局是可以接受的(无论如何,JS代码通常都是偶然的)