setTimeout无法正常工作

时间:2016-08-21 14:56:31

标签: javascript jquery html settimeout

我制作了一个程序,对用户输入进行一些处理。但是,不是在用户输入时处理输入,而是希望在用户停止输入后1秒钟处理它。

我尝试使用 setTimeout(),但这是我面临的问题:

1) 当我用引号编写函数名时,它在指定的时间后工作。

代码:

function test_function(input, data) {

$('#write_on_me').keyup(function() {
clearTimeout(timer);
    timer = setTimeout("console.log('do something')", 1000); 
});

$('#write_on_me').keydown(function() {
        clearTimeout(timer);
        console.log('clear timer');
});

}

test_function($('#write_on_me'));

jsFiddle

2)当我编写没有引号的函数时,它会在我键入时继续处理。

代码:

function test_function(input, data) {

$('#write_on_me').keyup(function() {
clearTimeout(timer);
    timer = setTimeout(console.log('do something'), 1000); 
});

$('#write_on_me').keydown(function() {
        clearTimeout(timer);
        console.log('clear timer');
});

}

test_function($('#write_on_me'));

jsFiddle

注意: 执行处理的实际函数不能在引号内调用,因为它包含在匿名函数中,如果使用引号调用,则会出现“未捕获的ReferenceError:函数未定义”错误。

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:3)

这一行:

ValueError: invalid literal for int() with base 10: '(255, 255, 255, 1)'

调用 timer = setTimeout(console.log('do something'), 1000); 并将其返回值传递到console.log('do something'),就像setTimeout 调用 foo(bar())一样它的返回值为bar

相反,将函数引用传递给它:

foo

如果你的"其他功能"没有使用它的参数,你可以直接引用它:

timer = setTimeout(function() {
    console.log('do something');
}, 1000);

如果它使用参数,请使用上面的匿名包装,或者查看Function#bind