2010-12-11 10 views
44

Al rellenar el área de texto de un formulario, el comportamiento predeterminado cuando se pulsa la tecla Intro es pasar a la siguiente línea. ¿Cómo puedo cambiar el comportamiento del formulario para que se envíe al usuario al presionar Enter incluso cuando el usuario está en un área de texto?¿Cómo enviar un formulario al ingresar cuando el área de texto tiene foco?

He utilizado Firebug para realizar el pedido Stack   El comentario de Overflow textarea (que tiene este comportamiento), pero no he podido ver ningún JavaScript que haya logrado este efecto. ¿Hay alguna manera de cambiar el comportamiento del área de texto sin usar JavaScript?

+3

¿Qué pasa si renombramos esta pregunta a "enviar formulario a entrar al área de texto en"? –

Respuesta

95

No puede hacer esto sin JavaScript. Stackoverflow está utilizando la biblioteca de JavaScript jQuery que adjunta funciones a elementos HTML en la carga de la página.

Así es como podría hacerlo con JavaScript básica:

<textarea onkeydown="if (event.keyCode == 13) { this.form.submit(); return false; }"></textarea> 

Keycode 13 es la tecla enter.

Así es como podría hacerlo con jQuery al igual como lo hace Stackoverflow:

<textarea class="commentarea"></textarea> 

con

$(document).ready(function() { 
    $('.commentarea').keydown(function(event) { 
     if (event.keyCode == 13) { 
      this.form.submit(); 
      return false; 
     } 
    }); 
}); 
+11

Dado que los usuarios están más familiarizados con las acciones cuando lanzan la clave, es una mejor práctica usar onkeyup o keyup() en lugar de keydown(). –

+0

Buena explicación. @Eric Fortis - buen punto sobre el onkeyup. – andrew

+0

Escribiré una función y la pondré en mi archivo de funciones de formulario para intentar mantener el código limpio. – andrew

4
<form id="myform"> 
    <input type="textbox" id="field"/> 
    <input type="button" value="submit"> 
</form> 

<script> 
    $(function() { 
     $("#field").keyup(function (event) { 
      if (event.which === 13) { 
       document.myform.submit(); 
      } 
     } 
    }); 
</script> 
+0

Observe que la parte relevante del HTML es la ID, utilicé un cuadro de texto pero puede ser cualquier etiqueta a la que desee adjuntar el comportamiento. También para facilitar la lectura, prefiero invocar el formulario por su ID, como se muestra, esto es muy útil especialmente si tiene múltiples formularios en su código. –

+0

Bien, no estoy planeando aprender jquery en este momento. Prefiero escribir la función yo mismo porque entonces tengo la oportunidad de practicar escribiendo javascript – andrew

5

¿Por qué quiere que se muestre un área de texto cuando presiona enter?

Una entrada de "texto" se enviará de forma predeterminada cuando presione enter. Es una entrada de línea única.

<input type="text" value="..."> 

Un "textarea" no lo hará, ya que se beneficia de las capacidades de varias líneas. El envío de Enter elimina parte de este beneficio.

<textarea name="area"></textarea> 

puede agregar código JavaScript para detectar la pulsación de tecla entrar y envío automático, pero puede ser mejor usar una entrada de texto.

+1

Porque quiero un cuadro de entrada de líneas múltiples y quiero que el usuario pueda enviar presionando Enter. Voy a eliminar por completo el botón de enviar. Creo que SO debería deshacerse de su botón Agregar comentario si van a permitir que se envíe el comentario cuando se presiona la tecla enter – andrew

Cuestiones relacionadas