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:我想我会把它留给读者作为练习。:-)你应该能够很直接地应用上面的方法。