2016-08-21 3 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')을 그냥 foo(bar())전화bar처럼 setTimeout에 반환 값을 통과로 반환 값을 전달 foo.

대신

, 그것으로 함수 참조를 전달 :

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

당신의 "기타 기능"인수를 사용하지 않는 경우, 당신은 단지 직접 참조 할 수 있습니다 :

timer = setTimeout(otherFunctionName, 1000); 

이 경우, 인수를 사용합니다. 위와 같이 익명의 래퍼를 사용하거나 Function#bind을 봅니다.

관련 문제