这个问题已经在这里有了答案:




已关闭8年。






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

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

我怎么只能调用一次函数?

我们可以通过调用onblur事件上的函数来完成此操作,但是我需要在不离开文本框的情况下执行此操作。

我将不胜感激。

最佳答案

您可以通过以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();
}

关于php - onkeyup函数javascript ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13723754/

10-12 00:23
查看更多