Je voudrais créer une fonction simple qui ajoute du texte dans une zone de texte à la position du curseur de l'utilisateur. Cela doit être une fonction propre. Juste les bases. Je peux comprendre le reste.
javascript
textarea
JoshMWilliams
la source
la source
Réponses:
la source
} else {
myField.selectionStart = startPos + myValue.length;
myField.selectionEnd = startPos + myValue.length;
selectionStart
est une valeur numérique, et devrait donc être comparé à0
et non'0'
, et devrait probablement utiliser===
Cet extrait de code pourrait vous aider dans quelques lignes de jQuery 1.9+: http://jsfiddle.net/4MBUG/2/
la source
Pour un bon Javascript
la source
this.value = ...
. Y a-t-il un moyen de le préserver?Nouvelle réponse:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setRangeText
Je ne suis pas sûr de la prise en charge du navigateur pour cela.
Ancienne réponse:
Une pure modification JS de la réponse d'Erik Pukinskis:
Si vous souhaitez changer la valeur du texte actuellement sélectionné pendant que vous tapez dans le même champ (pour un effet de saisie semi-automatique ou similaire), passez
document.activeElement
comme premier paramètre.Ce n'est pas la façon la plus élégante de le faire, mais c'est assez simple.
Exemples d'utilisations:
la source
Version 54.0.2813.0 canary (64-bit)
, qui est essentiellement Chrome Canary 54.0.2813.0. Enfin, si vous souhaitez qu'il s'insère dans la zone de texte par ID, utilisezdocument.getElementById('insertyourIDhere')
à la place deel
dans la fonction.Erik Pukinskis
. Je mettrai à jour la réponse pour mieux refléter cela.Une solution simple qui fonctionne sur Firefox, Chrome, Opera, Safari et Edge mais ne fonctionnera probablement pas sur les anciens navigateurs IE.
setRangeText
La fonction vous permet de remplacer la sélection actuelle par le texte fourni ou, en l'absence de sélection, d'insérer le texte à la position du curseur. Il est uniquement pris en charge par Firefox pour autant que je sache.Pour les autres navigateurs, il existe la commande "insertText" qui n'affecte que l'élément html actuellement focalisé et a le même comportement que
setRangeText
Inspiré en partie de cet article
la source
execCommand
car il prend en chargeundo
et fait insert-text-textarea . Pas de support IE mais plus petitexecCommand
est considéré comme obsolète par MDN: developer.mozilla.org/en-US/docs/Web/API/Document/execCommand Je ne sais pas pourquoi, cela semble vraiment utile!La réponse de Rab fonctionne très bien, mais pas pour Microsoft Edge, j'ai donc ajouté une petite adaptation pour Edge également:
https://jsfiddle.net/et9borp4/
la source
J'aime le javascript simple et j'ai généralement jQuery. Voici ce que j'ai trouvé, basé sur mparkuk :
Voici une démo: http://codepen.io/erikpukinskis/pen/EjaaMY?editors=101
la source