2010-01-05 16 views
8

Tengo un formulario simple que necesito enviar automáticamente cuando se ingresa el texto.envíe el formulario con retraso mientras ingresa los datos en el campo de entrada

Puedo usar el onChange o onKeyUp sin el mejor resultado.

HTML es:

<form action="" id="fusionSearchForm" method="post"> 
    <input type="text" class="std_input" id="fusion_searchText" /> 
    </form> 

y jQuery

jQuery("#fusionSearchForm").keyup(function() { 
    this.submit(); 
}); 

Esta somete cada vez que se introduce un carácter. Yo preferiría lo tendría tan - hubo un retraso antes de enviar para que pueda terminar su escritura - que el foco permanece en el campo de introducción dispuesto a escribir después de enviar (si recarga)

Cualquier forma de retrasar una forma. submit() para que el usuario pueda terminar de escribir antes de enviar el formulario?

(actualización de código para un tipo más "jQuery" de manera de enviar)

Br. Anders

+1

No se puede saber si el usuario terminó de escribir. ¿Qué pasa si alguien escribe muy lentamente? –

Respuesta

14

Esto debería funcionar. Envía el formulario cuando no se escribió nada para 500ms

var timerid; 
jQuery("#fusionSearchForm").keyup(function() { 
    var form = this; 
    clearTimeout(timerid); 
    timerid = setTimeout(function() { form.submit(); }, 500); 
}); 
+0

¡Gracias! Intenté con el mismo código pero sin suerte. Pero luego agregué un var timerid = '' a después de la forma var y eso hizo el truco. Gracias. – Tillebeck

+0

No. No funcionó. el clearTimeout no funciona, supongo que ya que el formulario se enviará después de 500msek, incluso si sigo escribiendo – Tillebeck

+0

Bueno ... ya tenías todo en tu respuesta. Me perdí el var timerid en la parte superior fuera de la onkeyup. Gracias. – Tillebeck

5

Esta es una mala idea. No desea eludir los controles que las personas esperan en las entradas del formulario. Si no desea un botón de envío, al menos espere a enviar hasta que capture una "entrada".

Aparte de un dispositivo de lectura de la mente del usuario ¿cómo podría saber alguna vez cuando un usuario termine de escribir, a menos que esté buscando que tipeen "regresar" o "ingresar"? Los usuarios no sabrán que se supone que deben detenerse un momento para permitir que el formulario se envíe en el tiempo de espera, o que deben apresurarse para obtener su búsqueda antes del tiempo de espera de 500MS.

Ver: this question

de si desea empezar a devolver los resultados inmediatamente después de cualquier envío que podría hacer algún tipo de autocompletar ajax.

autocomplete http://img9.imageshack.us/img9/5526/autocompletegoogle.png

Aquí está un ejemplo de jQuery de presentar en una introduzca:

$("input").keypress(function(e) { 
      switch (e.keyCode) { 
        case 13: 
          $("#formid").submit(); 
          return false; 
        default: 
          return true; 
      } 
    }); 
+0

Es cierto, pero es un requisito del diseñador. Pero si puedo establecer un retraso de, por ejemplo, 500 mseg luego pregunto que solo algunos estarán locos. – Tillebeck

+0

Me gusta el autocompletar. Da la sensación real de web2.0. También me gustaría que fuera la lista real la que se actualizó. Supongo que sería fácil usar CSS, pero tengo muchos registros, por lo que sería necesario algún tipo de llamada al servidor. Todavía no hemos investigado eso – Tillebeck

+1

Gracias por darnos consejos sobre una mejor usabilidad, creando una mejor internet para todos nosotros. :) – Lilleman

Cuestiones relacionadas