3

我需要一些关于我调用 onKeyUp 的 JavaScript 函数的帮助,它是一个 Ajax 函数,但是每次我编写任何字符时它都会调用该函数并且它会降低页面性能并且它每次都会检查,这是用户对数据库的检查。

我试过这个:

 var timer;
 function chk_me(){

   clearTimeout(timer);
   timer=setTimeout(function validate(){...},1000);
}

但是我的验证函数有一个参数,所以我无法传递它,我这样调用函数:

<input type="text" name="usuario" id="usuario" class="required" onKeyUp="chk_me();" minlegth="4" value=/> 

这样对吗?我该怎么办?

这是我的第一个问题,希望大家理解

谢谢,阿尔贝托

谢谢大家,因为我是新手,所以我不能用不同的答案来做,所以我用解决方案编辑了我的问题。我发现这个:http ://bytes.com/topic/javascript/answers/451142-need-advice-acting-only-last-onkeyup-event-series并使用最后一个答案方法并添加一些代码,我离开你代码,就像它说的那样,它不是最好的方法,但可以工作,所以如果你有其他方法,我会欣赏它并在这里使用它:

var keyCount = 0;
var timeoutCount = 0;

function handleKeyUp() // keyup handler
{
keyCount++;
setTimeout("compareCounts()", 500);
}

function compareCounts()
{
var usuario = document.profileForm.usuario.value;
timeoutCount++;
if (keyCount == timeoutCount)
{
xajax_checaUsuario(usuario);
}
}

所以我以这种方式接受 var 有什么建议可以让它变得更好吗?

谢谢

4

3 回答 3

7

不要validate直接传递给setTimeout,而是从匿名函数中调用它:

var timer;
function chk_me(arg) {
    clearTimeout(timer);
    timer = setTimeout(function () {
        validate(arg);
    }, 1000);
}
于 2011-07-18T22:59:04.410 回答
0

您可以执行以下操作

var timer;
 function chk_me(myparam){

   clearTimeout(timer);
   timer=setTimeout(function validate(){...},1000);
} 

在 javascript 中,您可以访问定义函数的范围内的任何变量。下面是你如何使用它。

<input type="text" name="usuario" id="usuario" class="required" onKeyUp="chk_me('stringval');" minlegth="4" value=/>
于 2011-07-18T22:26:07.767 回答
0

如果我正确理解了您的问题,我认为您想要的是将参数包含在闭包中:

var timer;
function chk_me(myparam) {

    clearTimeout(timer);
    var validate = function() {

       //do stuff with myparam
       var foo = myparam;

    }
    timer=setTimeout(validate,1000);
}

和以前一样,计时器确保取消任何先前的调用,除非等待 1 秒,并且当您在 chk_me 范围内定义 validate 时,局部变量 myparam 将在其中可见,即使它的句柄传递给 setTimeout。

于 2011-07-18T22:52:51.190 回答