Atualmente, se a pessoa pressionar enterdentro da área de texto, o formulário será enviado.
Bom, eu quero isso.
Mas quando eles digitam shift+ enter, quero que a área de texto passe para a próxima linha:\n
Como posso fazer isso no JQuery
JavaScript simples ou o mais simples possível?
javascript
jquery
html
css
TIMEX
fonte
fonte
e.shiftKey
.shiftKey
propriedade do evento .Respostas:
Melhor usar solução mais simples:
A solução de Tim abaixo é melhor, sugiro usar isso: https://stackoverflow.com/a/6015906/4031815
Minha solução
Eu acho que você pode fazer algo assim ..
EDIT: O código foi alterado para funcionar independentemente da posição do sinal de intercalação
A primeira parte do código é obter a posição do cursor.
Ref: Como obter a posição da coluna de sinal de intercalação (não pixels) em uma área de texto, em caracteres, desde o início?
E, em seguida, substituindo o valor da área de texto adequadamente quando Shift+ Enterjuntos, envie o formulário se Enterfor pressionado sozinho.
Aqui está uma demonstração
fonte
event.keyCode == 13
) e eu acho que você provavelmente também queriaevent.preventDefault()
e nãoevent.stopPropagation()
.event.stopPropagation()
eu pretendia interromper algum outro código que ele possa ter escrito para enviar o formulário.event.stopPropagation()
, isso impedirá que o evento borbulhe ainda mais no DOM, mas não impedirá que o pressionamento de tecla faça sua ação padrão de inserir uma quebra de linha (embora, na verdade, nakeyup
minha sugestão deevent.preventDefault()
não o faça).carent
não está definido, se eu mudá-lo para acento circunflexo ele adiciona 2 novas linhasSolução fácil e elegante:
Primeiro, pressionar Enterdentro de uma área de texto não envia o formulário, a menos que você tenha um script para fazê-lo. Esse é o comportamento que o usuário espera e eu recomendo que não seja alterado. No entanto, se você precisar fazer isso, a abordagem mais fácil seria encontrar o script que está Enterenviando o formulário e alterá-lo. O código terá algo como
... e você pode simplesmente mudar para
Por outro lado, se você não tiver acesso a esse código por algum motivo, faça o seguinte para fazê-lo funcionar em todos os principais navegadores, mesmo que o cursor não esteja no final do texto:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Código:
fonte
A maioria dessas respostas complica isso demais. Por que não tentar dessa maneira?
Não é necessário mexer na posição de cursor ou empurrar a linha para o JS. Basicamente, a função não funcionará se a tecla Shift estiver sendo pressionada, permitindo que a tecla Enter / Return execute sua função normal.
fonte
Por que não apenas
fonte
Use o plug-in de teclas de atalho jQuery e este código
fonte
Aqui está uma solução AngularJS usando ng-keyup se alguém tiver o mesmo problema usando o AngularJS.
fonte
Usando o ReactJS ES6, aqui está a maneira mais simples
shift+ enterNova linha em qualquer posição
enter Bloqueado
fonte
Encontrei este tópico procurando uma maneira de controlar Shift + qualquer tecla. Eu colei outras soluções para fazer essa função combinada realizar o que eu precisava. Espero que ajude alguém.
fonte
Caso alguém ainda esteja se perguntando como fazer isso sem o jQuery.
HTML
<textarea id="description"></textarea>
Javascript
JS de baunilha
fonte
Eu uso div, adicionando contenteditable true em vez de usar a área de texto.
A esperança pode ajudá-lo.
fonte
Isso funciona para mim!
fonte
usando a
ng-keyup
diretiva no angularJS, envie apenas uma mensagem ao pressionar aEnter
tecla eShift+Enter
terá apenas uma nova linha.fonte