Actualmente, si la persona presiona enterdentro del área de texto, se enviará el formulario.
Bien, quiero eso
Pero cuando escriben shift+ enter, quiero que el área de texto se mueva a la siguiente línea:\n
¿Cómo puedo hacer eso en JQuery
JavaScript o lo más simple posible?
javascript
jquery
html
css
TIMEX
fuente
fuente
e.shiftKey
.shiftKey
propiedad del evento .Respuestas:
Mejor usar una solución más simple:
La solución de Tim a continuación es mejor, sugiero usar eso: https://stackoverflow.com/a/6015906/4031815
Mi solución
Creo que puedes hacer algo como esto ...
EDITAR: cambió el código para que funcione independientemente de la posición de intercalación
La primera parte del código es obtener la posición de intercalación.
Ref: ¿Cómo obtener la posición de la columna de intercalación (no píxeles) en un área de texto, en caracteres, desde el principio?
Y luego reemplazando el valor del área de texto en consecuencia cuando Shift+ Enterjuntos, envíe el formulario si Enterse presiona solo.
Aquí hay una demostración
fuente
event.keyCode == 13
) y creo que probablemente también quisiste enevent.preventDefault()
lugar deevent.stopPropagation()
.event.stopPropagation()
intención de detener algún otro código que él haya escrito para enviar el formulario.event.stopPropagation()
, eso evitará que el evento burbujee más arriba en el DOM, pero no evitará que la pulsación de tecla realice su acción predeterminada de insertar un salto de línea (aunque en realidad, enkeyup
mi sugerenciaevent.preventDefault()
, tampoco lo hará).carent
no está definido, si lo cambio para preocuparlo agrega 2 líneas nuevasSolución fácil y elegante:
Primero, presionar Enterdentro de un área de texto no envía el formulario a menos que tenga una secuencia de comandos para hacerlo. Ese es el comportamiento que el usuario espera y recomendaría no cambiarlo. Sin embargo, si debe hacer esto, el enfoque más fácil sería encontrar el script que está Enterenviando el formulario y cambiarlo. El código tendrá algo como
... y podrías cambiarlo a
Por otro lado, si no tiene acceso a este código por algún motivo, debe hacer lo siguiente para que funcione en todos los navegadores principales, incluso si el cursor no está al final del texto:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Código:
fuente
La mayoría de estas respuestas complican demasiado esto. ¿Por qué no intentarlo de esta manera?
No perder el tiempo con la posición de cuidado o la línea de empuje se rompe en JS Básicamente, la función no se ejecutará si se presiona la tecla shift, por lo tanto, permite que la tecla enter / return realice su función normal.
fuente
¿Por qué no solo
fuente
Use el complemento jQuery hotkeys y este código
fuente
Aquí hay una solución AngularJS que usa ng-keyup si alguien tiene el mismo problema al usar AngularJS.
fuente
Usando ReactJS ES6 esta es la forma más simple
shift+ enterNueva línea en cualquier posición
enter Obstruido
fuente
Encontré este hilo buscando una forma de controlar Shift + cualquier tecla. Pegué otras soluciones para hacer que esta función combinada lograra lo que necesitaba. Espero que ayude a alguien más.
fuente
En caso de que alguien todavía se pregunte cómo hacer esto sin jQuery.
HTML
<textarea id="description"></textarea>
Javascript
Vanilla JS
fuente
Uso div agregando contenteditable true en lugar de usar textarea.
La esperanza te puede ayudar.
fuente
Esto funciona para mi!
fuente
usando la
ng-keyup
directiva en angularJS, solo envíe un mensaje al presionar laEnter
tecla yShift+Enter
solo tomará una nueva línea.fuente