0

我有这个触发的 jquery ajax 调用keyup。如果用户快速输入击键,它会触发多次错误处理(例如使用 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!")
            }
        }); 
    }
});
4

1 回答 1

0

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

利用timer = setTimeout(yourFunction, yourDelay);

让计时器用户休息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 兼容(hack)版本http://jsfiddle.net/5ndM5/1/ 试图找到一个 jQuery 替代方案,但似乎没有。如果您不想要全局 var,则覆盖函数替代方案很好,但如果您只打算在一种形式上使用此代码,那么全局是可以接受的(无论如何,JS 代码通常都充满了它们)

于 2012-11-14T21:56:02.213 回答