Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Caio Tarifa

[Resolvido] Intervalo antes de executar função.

Recommended Posts

Olá pessoal,

 

Eu estou desenvolvendo um sistema cujo a busca traz resultados em tempo real a medida que algo é digitado (keyup), mas estou com receio de sobrecarregar o servidor com muitas requisições, por isto gostaria de criar a seguinte solução: apenas depois de 1500ms que a ultima letra fora digitada é que o sistema irá executar a função de procura.

 

Ps: Já dei uma olhada nas funções setInterval() e setTimeout() e não encontrei nenhuma solução pois mesmo que elas executem a ação depois de determinado tempo, elas executam para cada letra digitada e não para a última apenas.

 

Utilizo jQuery.

 

Espero que possa me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi a lógica que você quer seguir...

 

só executa se passar 1 segundo e meio sem digitar nada ?

então a cada keyup, você precisa dar um clearInterval()... o setTimeOut(), é a medida para você.. pois com ele, você vai conseguir fazer o teu código esperar os 1500 milisegundos, ai a cada keyup, você dá um clear no intervalo, assim só será realmente executado, se o cara ficar 1500ms sem digitar.

 

é isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um autocomplete? Se não for, por que está utilizando o evento onkeyup? É realmente necessário?

 

Enfim, o efeito setTimeout deve funcionar... não vejo restrição.

 

<script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
        $("input").keyup(function() {
                setTimeout('$("div").fadeOut();', 1500)
        });
});
</script>
<input type="text" />
<div>My Text</div>

Vê aí se resolve :]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

 

Primeiramente obrigado pelas respostas... Willian Bruno é exatamente isto que você descreveu que estou tentando fazer, fiz um código em base no que voce me falou:

 

  $input_search.keyup(function() {
    var $length = $(this).val().length;
    if($length > 1) {
      $('#results').slideDown();
      clearInterval($intervalo);
      var $intervalo = setTimeout(function() {
        alert("Teste de intervalo.");
      }, 1500);
    } else {
      $('#results').slideUp();
    }
  });

Mas não funcionou, ele continua executando o "Teste de intervalo" inúmeras vezes...

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum...

 

<html>
<head>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	var intervalo = 0;
	$("input[name='search']").keyup(function(){

		clearInterval( intervalo );//ou clearTimeout()
		intervalo = window.setTimeout( ajax, 1500 );
	});
});
function ajax()
{
	alert( 'Agora pode ir executar' );
}
</script>
</head>
<body>
	<form action="" method="post">
		<fieldset>
			<label><input type="text" name="search" /></label>
		</fieldset>
	</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo, valeu cara!

 

  $input_search.keyup(function() {
    var $length = $(this).val().length;
    if($length > 1) {
      $('#results').slideDown();
      clearTimeout($interval);
      $interval = window.setTimeout(function() {
        alert(1);
      }, 1500);
    } else {
      $('#results').slideUp();
    }
  });

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.