Php onkeyup函数javascript

Php onkeyup函数javascript,php,javascript,javascript-events,Php,Javascript,Javascript Events,可能重复: 假设我有一个inputbox,我在其中调用了onkeyup上的ajax函数。当用户在文本框中输入任何值时,该值将通过ajax函数并使用gd写入图像 但我有一个问题,当用户在文本框中键入10个字符的值,然后ajax函数在onkeyup上调用10次,并且在图像上写入响应需要很长时间 如何只调用一次函数 我们可以通过调用onblurevent上的函数来实现,但我需要在不离开文本框的情况下实现 我非常感谢任何类型的帮助。您可以通过调用setTimeout来建立一点滞后来实现这一点。这是对可

可能重复:

假设我有一个
inputbox
,我在其中调用了
onkeyup
上的ajax函数。当用户在文本框中输入任何值时,该值将通过ajax函数并使用gd写入图像

但我有一个问题,当用户在文本框中键入10个字符的值,然后ajax函数在
onkeyup
上调用10次,并且在图像上写入响应需要很长时间

如何只调用一次函数

我们可以通过调用
onblur
event上的函数来实现,但我需要在不离开文本框的情况下实现


我非常感谢任何类型的帮助。

您可以通过调用
setTimeout
来建立一点滞后来实现这一点。这是对可能反复触发的昂贵操作的典型响应。当出现
keyup
时,安排(比如)100毫秒后的超时。如果在该100毫秒内发生另一个
keyup
,请取消先前的超时并设置一个新的超时。当超时发生时,执行昂贵的操作

例如,如果以前的处理程序如下所示:

function handleKeyUp() {
    doThisExpensiveThing();
    doThatExpensiveThing();
    doAnotherExpensiveThing();
}
var keyupTimer = 0; // 0 is a safe "no timer" value, setTimeout never returns 0
function handleKeyUp() {
    // Have an outstanding call?
    if (keyupTimer) {
        // Yes, clear it
        clearTimeout(keyupTimer);
    }

    // Set a new call to occur in 100ms
    keyupTimer = setTimeout(doExpensiveStuff, 100);
}

function doExpensiveStuff() {
    // Clear the timer handle so we know we don't have a call pending
    keyupTimer = 0;

    // Do the expensive stuff
    doThisExpensiveThing();
    doThatExpensiveThing();
    doAnotherExpensiveThing();
}
…您的新版本可能如下所示:

function handleKeyUp() {
    doThisExpensiveThing();
    doThatExpensiveThing();
    doAnotherExpensiveThing();
}
var keyupTimer = 0; // 0 is a safe "no timer" value, setTimeout never returns 0
function handleKeyUp() {
    // Have an outstanding call?
    if (keyupTimer) {
        // Yes, clear it
        clearTimeout(keyupTimer);
    }

    // Set a new call to occur in 100ms
    keyupTimer = setTimeout(doExpensiveStuff, 100);
}

function doExpensiveStuff() {
    // Clear the timer handle so we know we don't have a call pending
    keyupTimer = 0;

    // Do the expensive stuff
    doThisExpensiveThing();
    doThatExpensiveThing();
    doAnotherExpensiveThing();
}
JS:


var超时;
功能键控(值){
clearTimeout(超时);
timeout=setTimeout(函数(){
//这里是Ajax代码
}, 500 );
}
HTML:


@Jimmy:我想我会把它留给读者作为练习。:-)你应该能够很直接地应用上面的方法。