我制作了一个程序,对用户输入进行一些处理。但是,不是在用户输入时处理输入,而是希望在用户停止输入后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'));
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'));
注意: 执行处理的实际函数不能在引号内调用,因为它包含在匿名函数中,如果使用引号调用,则会出现“未捕获的ReferenceError:函数未定义”错误。
任何帮助将不胜感激:)
答案 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
。