2016-08-21 2 views
-1

Я сделал программу, которая выполняет некоторую обработку на входе пользователя. Но вместо обработки ввода как пользовательских типов я хочу, чтобы он обрабатывался через 1 секунду после того, как пользователь прекратил печатать.setTimeout не работает правильно

Я попытался с помощью 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

Примечание: Реальная функция, которая делает обработку нельзя назвать в кавычках, как он заключен в анонимную функцию и дает "Uncaught ReferenceError: функция не определена "ошибка при вызове с кавычками.

Любая помощь будет оценена :)

ответ

3

Эта строка:

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

звонкиconsole.log('do something') и передает ее возвращаемое значение в setTimeout, так же, как foo(bar())звонкиbar и передает ее возвращаемое значение в foo.

Вместо передать ссылку на функцию в него:

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

Если «другие функции» не использует свои аргументы, вы можете просто обратиться к нему напрямую:

timer = setTimeout(otherFunctionName, 1000); 

Если это использует аргументы, либо использует анонимную упаковку, как указано выше, либо смотри Function#bind.

Смежные вопросы