Tengo una página web dinámica con JS. Hay un textarea y un botón Enviar, pero no forma etiquetas. ¿Cómo hago que me envíen botón de disparo y el área de texto ser anulado cuando Introduzca se presiona en el área de texto ?Enviar datos desde el área de texto presionando "Enter"
Respuesta
Puede utilizar un controlador de teclado para el área de texto (aunque desaconsejaría *).
[SomeTextarea].onkeyup = function(e){
e = e || event;
if (e.keyCode === 13) {
// start your submit function
}
return true;
}
* ¿Por qué no utilizar un campo de entrada de texto para esto? Textarea es especialmente adecuado para la entrada de líneas múltiples, un campo de entrada de texto para la entrada de una sola línea. Con un manejador de enter, criplica la entrada de líneas múltiples. Recuerdo usarlo una vez para una aplicación de chat XHR (también conocida como AJAX) (por lo que el área de texto se comportó como un área de entrada MSN), pero volví a habilitar la entrada de línea múltiple con la tecla CTRL-intro para líneas nuevas. Puede ser que sea una idea para ti? El oyente se extendería como esto:
[SomeTextarea].onkeyup = function(e){
e = e || event;
if (e.keyCode === 13 && !e.ctrlKey) {
// start your submit function
}
return true;
}
Se ve bien, gracias. ¿Qué necesitas la línea * e = e || evento; * para? – Alex
@Alex: firefox, opera y safari (y otros navegadores que incorporan webkit) pasan los eventos como un argumento al controlador de eventos, pero IE no lo hace. En IE, el evento es una propiedad en el objeto global. Felizmente la semántica de || en JS lo hacen realmente limpio para evitar esto. En JS el resultado de la expresión 'a || b' será el valor de 'a', o si' a' se considera falso, el resultado será 'b'. Entonces en este caso 'e = e || event' asignará 'e' a sí mismo si el evento se pasa como un argumento, o establecerá' e' al 'de' event', permitiendo así que este código funcione en todos los navegadores. – olliej
Al pulsar Intro en textarea
inserta un salto de línea, en lugar de enviar el formulario principal; esto no funcionaría de esa manera incluso con etiquetas de formulario regulares.
No sería aconsejable evitar este comportamiento, ya que violaría las expectativas del usuario sobre el comportamiento de los controles de área de texto, tanto en otros sitios web como en otras aplicaciones de su plataforma.
++ para el párrafo "desaconsejable". Siempre saber lo que hará la tecla enter en un sitio web textarea es una de las muchas pequeñas consistencias que extraño cuando uso otras GUI. – Shog9
aunque estoy totalmente de acuerdo con su consejo, la pregunta en cuestión está formulada con mucha precisión y requiere una respuesta bastante más que un buen consejo. +1 aún, ¿pero no podría aconsejarme sobre cómo adjuntar algún tipo de keyListener al área de texto para enviar el formulario en Enter según lo solicitado? Estoy bastante interesado ... –
Volví a subir esta respuesta hace mucho tiempo, pero hay casos en los que el usuario no está realmente consciente de que está escribiendo en un área de texto. Considere la línea de entrada del chat de Facebook, por ejemplo. Comienza como una sola línea y se expande verticalmente a medida que el usuario escribe más. Es absolutamente razonable que los usuarios esperen que se presente al ingresar. – hasen
aquí está mi solución:
en javascript:
function isEnterPressed(e){
var keycode=null;
if (e!=null){
if (window.event!=undefined){
if (window.event.keyCode) keycode = window.event.keyCode;
else if (window.event.charCode) keycode = window.event.charCode;
}else{
keycode = e.keyCode;
}
}
return (keycode == 13);}
en HTML:
<input type="text" onkeyup="if(isEnterPressed(event)){/*do something*/}" />
@ Shog9 sugirió que copio mi respuesta a una versión duplicada de esta pregunta: Un problema que esto ignora es que los usuarios corren método de entrada de ningun (editores) - ej. entrada de texto no latina El IME con el que estoy familiarizado es el Kotoeri Hiragana IM en OSX, pero hay muchos otros tanto para japonés (Kotoeri solo tiene múltiples modos de entrada diferentes, y hay al menos otro más importante llamado ATOK), además de modos para Hangul, chino tradicional y simplificado, así como muchos otros idiomas menos conocidos. Y estos métodos de entrada existen en todas las plataformas principales (especialmente Win, Mac y Linux).
El problema que introducen desde el punto de vista del código similar al que está intentando es que las teclas físicas exactas no se corresponden necesariamente con la entrada real que ingresa el usuario.
Por ejemplo escribiendo la secuencia de caracteres toukyou<enter>
bajo hiragana por defecto producirá la cadena とうきょう
, tenga en cuenta que no hay <enter>
en el texto resultante porque entrar confirma el texto compuesto. Pero además de esto la secuencia real de caracteres que aparece cambios como la entrada se escribe:
t // t
と // to
とう // tou
とうk // touk
とうky // touky
とうきょ // toukyo
とうきょう // toukyou
Si falla la memoria cuando he implementado esto en WebKit que era necesario hacer el código clave sea 229 en keyDown para todas las llaves mecanografiadas en un IME (para compat con IE), pero no recuerdo cuál es el comportamiento de keyUp.
También vale la pena señalar que en algunos IME no necesariamente recibirá keydowns, keypress o keyup. O recibirás múltiples. O todos se envían juntos al final de la entrada.
En general, esta es una parte muy ... sucia ... de las implementaciones de eventos DOM actualmente.
El área de texto es para permitir a los usuarios ingresar varias líneas de texto, por lo que presionar enter solo insertaría una nueva línea en el texto. Use el campo de texto normal en su lugar si desea ese comportamiento
¿Hay alguna razón por la que no esté utilizando un contenedor de formularios?
$('#input_id').keypress(function(e){
if(e.which == 13){
$('#form_id').submit();
return false; //prevent duplicate submission
}
});
- 1. Ctrl + Enter jQuery en el área de texto
- 2. Presiona presionando Enter en un formulario de Windows
- 3. C# ¿Cómo hago clic en un botón presionando Enter mientras el cuadro de texto tiene foco?
- 4. Cómo asociar presionando "enter" con hacer clic en el botón?
- 5. ¿Cómo puedo enviar acordes clave al área de texto con selenio?
- 6. Limitando el número de líneas en el área de texto
- 7. Javascript presentar cuadro de texto en ENTER
- 8. ¿Cómo puedo permitir solo shift + enter para devolver una nueva línea en el área de texto?
- 9. Cómo hacer que la tecla "Enter" en un área de texto envíe un formulario
- 10. ¿Cómo enviar un formulario al ingresar cuando el área de texto tiene foco?
- 11. ¿Cómo enviar un formulario AJAX con la tecla ENTER, desde textarea?
- 12. Sangría automática de área de texto "inteligente"
- 13. Formulario enviar en claveCódigo == "enter" (13)
- 14. Cómo cambiar el texto de un TextView presionando un botón
- 15. knockoutjs enviar enlace no manipular la tecla enter correctamente
- 16. Cómo leer línea por línea desde un área de texto
- 17. Reemplazar el texto seleccionado en el área de texto
- 18. CSS: el botón Enviar parece más pequeño que la entrada de texto y el área de texto
- 19. en el área de texto con jQuery
- 20. jQuery Área de texto en crecimiento móvil con datos AJAX
- 21. Sucursal desde el área de trabajo local
- 22. jQuery ajustar el texto seleccionado en un área de texto
- 23. ¿Cómo debo desinfectar correctamente los datos recibidos de un área de texto cuando los devuelvo al área de texto?
- 24. Enlazar el cuadro de texto a la tecla 'enter'
- 25. área de texto dentro div
- 26. Ejecutar la función cuando se presiona enter si el cuadro de texto tiene foco
- 27. Prevención "Enter" de la presentación del modelo, pero permitir que en los campos de área de texto (jQuery)
- 28. Enviar SMS desde el iPhone mediante programación
- 29. jQuery: Impedir la tecla enter
- 30. Hacer un área de texto todo en mayúsculas?
Lo siento por engañarlo. Leí textarea, pero creo que input type = "text" ...... eliminé mi repugnante respuesta :) –
La gente pregunta por qué no utilizar una entrada [text] en lugar de textarea. Para mí, la razón es que quiero permitir que el usuario ingrese solo una línea de texto, pero quiero que el texto se envuelva en varias líneas. La entrada [texto] no ajusta –