Actuellement, si la personne appuie enterdans la zone de texte, le formulaire sera soumis.
Bien, je veux ça.
Mais quand ils tapent shift + enter, je veux que la zone de texte passe à la ligne suivante:\n
Comment puis-je faire ça en JQuery
ou en JavaScript le plus simple possible?
javascript
jquery
html
css
TIMEX
la source
la source
e.shiftKey
.shiftKey
propriété de l'événement .Réponses:
Mieux utiliser une solution plus simple:
La solution de Tim ci-dessous est meilleure, je suggère d'utiliser cela: https://stackoverflow.com/a/6015906/4031815
Ma solution
Je pense que vous pouvez faire quelque chose comme ça ...
EDIT: a changé le code pour qu'il fonctionne indépendamment de la position du curseur
La première partie du code consiste à obtenir la position du curseur.
Réf: Comment obtenir la position de la colonne caret (pas des pixels) dans une zone de texte, en caractères, dès le début?
Et puis en remplaçant la valeur textarea en conséquence lorsque Shift+ Enterensemble, soumettez le formulaire si Enterest appuyé seul.
Voici une démo
la source
event.keyCode == 13
) et je pense que vous vouliez probablement aussievent.preventDefault()
plutôt queevent.stopPropagation()
.event.stopPropagation()
je voulais arrêter un autre code qu'il a peut-être écrit pour soumettre le formulaire.event.stopPropagation()
, cela empêchera l'événement de remonter plus haut dans le DOM mais n'empêchera pas la pression de touche de faire son action par défaut d'insérer un saut de ligne (bien qu'en fait, danskeyup
ma suggestionevent.preventDefault()
, ne le fera pas non plus).carent
n'est pas définie, si je le change en caret, cela ajoute 2 nouvelles lignesSolution simple et élégante:
Tout d'abord, appuyer sur Enterune zone de texte ne soumet pas le formulaire à moins que vous n'ayez un script pour le faire. C'est le comportement attendu par l'utilisateur et je recommande de ne pas le changer. Cependant, si vous devez faire cela, l'approche la plus simple serait de trouver le script qui Entersoumet le formulaire et de le modifier. Le code aura quelque chose comme
... et vous pouvez simplement le changer en
D'un autre côté, si vous n'avez pas accès à ce code pour une raison quelconque, vous devez procéder comme suit pour le faire fonctionner dans tous les principaux navigateurs, même si le signe d'insertion n'est pas à la fin du texte:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Code:
la source
La plupart de ces réponses compliquent trop la situation. Pourquoi ne pas l'essayer de cette façon?
Pas de déranger avec la position du curseur ou de pousser les sauts de ligne dans JS. Fondamentalement, la fonction ne fonctionnera pas si la touche Majuscule est enfoncée, permettant ainsi à la touche Entrée / Retour de remplir sa fonction normale.
la source
Pourquoi pas juste
la source
Utilisez le plugin jQuery hotkeys et ce code
la source
Voici une solution AngularJS utilisant ng-keyup si quelqu'un a le même problème avec AngularJS.
la source
En utilisant ReactJS ES6, voici le moyen le plus simple
shift + enter Nouvelle ligne à n'importe quelle position
enter Bloqué
la source
J'ai trouvé ce fil à la recherche d'un moyen de contrôler Shift + n'importe quelle touche. J'ai collé ensemble d'autres solutions pour que cette fonction combinée accomplisse ce dont j'avais besoin. J'espère que cela aide quelqu'un d'autre.
la source
Au cas où quelqu'un se demanderait encore comment faire cela sans jQuery.
HTML
<textarea id="description"></textarea>
Javascript
Vanille JS
la source
J'utilise div en ajoutant contenteditable true au lieu d'utiliser textarea.
L'espoir peut vous aider.
la source
Cela fonctionne pour moi!
la source
en utilisant la
ng-keyup
directive dans angularJS, n'envoyez un message qu'en appuyant sur laEnter
touche etShift+Enter
prendra juste une nouvelle ligne.la source