Comment définir la position du curseur dans un champ de texte à l'aide de jQuery? J'ai un champ de texte avec du contenu et je veux que le curseur des utilisateurs soit positionné à un certain décalage lorsqu'ils se concentrent sur le champ. Le code devrait ressembler à ceci:
$('#input').focus(function() {
$(this).setCursorPosition(4);
});
À quoi ressemblerait l'implémentation de cette fonction setCursorPosition? Si vous aviez un champ de texte avec le contenu abcdefg, cet appel entraînerait le positionnement du curseur comme suit: abcd ** | ** efg.
Java a une fonction similaire, setCaretPosition. Existe-t-il une méthode similaire pour javascript?
Mise à jour: j'ai modifié le code de CMS pour fonctionner avec jQuery comme suit:
new function($) {
$.fn.setCursorPosition = function(pos) {
if (this.setSelectionRange) {
this.setSelectionRange(pos, pos);
} else if (this.createTextRange) {
var range = this.createTextRange();
range.collapse(true);
if(pos < 0) {
pos = $(this).val().length + pos;
}
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
}(jQuery);
javascript
jquery
html
textfield
jcnnghm
la source
la source
$(this).get(0).setSelectionRange)
? Vous savez que c'est exactement la même chose quethis.setSelectionRange
, plus lent et plus difficile à lire, non? jQuery ne fait littéralement rien pour vous ici.Réponses:
J'ai deux fonctions:
Ensuite, vous pouvez utiliser setCaretToPos comme ceci:
Exemple en direct avec a
textarea
et aninput
, montrant l'utilisation de jQuery:Afficher l'extrait de code
Depuis 2016, testé et fonctionnant sur Chrome, Firefox, IE11, voire IE8 (voir ce dernier ici ; les extraits de pile ne prennent pas en charge IE8).
la source
textarea
(etinput
) pour moi sur Chrome, Firefox, IE8 et IE11.Voici une solution jQuery:
Avec cela, vous pouvez faire
la source
selectRange($('.my_input')[0], 3, 5)
si vous utilisez déjà jQuery. De plus, il devrait fonctionner avec plus d'un élément, si vous en avez besoin, pour une raison quelconque. Si vous voulez du natif pur, veuillez utiliser la solution de CMS.$('#elem').focus()
au préalable pour faire apparaître le curseur clignotant.Les solutions ici sont correctes, sauf pour le code d'extension jQuery.
La fonction d'extension doit parcourir chaque élément sélectionné et revenir
this
au support du chaînage. Voicilaune version correcte:la source
return this.each(function...)
et supprimer la ligne autonome.J'ai trouvé une solution qui fonctionne pour moi:
Vous pouvez maintenant déplacer le focus à la fin de n'importe quel élément en appelant:
Ou vous spécifiez la position.
la source
this.scrollTop(this[0].scrollHeight);
, pour garantir que la zone de texte défile pour rendre le point d'insertion visible.Cela a fonctionné pour moi sur Safari 5 sur Mac OSX, jQuery 1.4:
la source
Je me rends compte que c'est un très ancien article, mais j'ai pensé que je devrais peut-être proposer une solution plus simple pour le mettre à jour en utilisant uniquement jQuery.
Utilisation pour utiliser ctrl-enter pour ajouter une nouvelle ligne (comme dans Facebook):
Je suis ouvert à la critique. Je vous remercie.
MISE À JOUR: Cette solution ne permet pas aux fonctionnalités normales de copier-coller de fonctionner (c'est-à-dire ctrl-c, ctrl-v), donc je devrai les modifier à l'avenir pour m'assurer que la pièce fonctionne à nouveau. Si vous avez une idée de la façon de procéder, veuillez commenter ici, et je serai heureux de le tester. Merci.
la source
Dans IE pour déplacer le curseur sur une position, ce code suffit:
la source
J'utilise ceci: http://plugins.jquery.com/project/jCaret
la source
Réglez le focus avant d'avoir inséré le texte dans la zone de texte ainsi?
la source
Cela fonctionne pour moi en chrome
Apparemment, vous avez besoin d'un délai d'une microseconde ou plus, car généralement un utilisateur se concentre sur le champ de texte en cliquant à une position dans le champ de texte (ou en appuyant sur l'onglet) que vous souhaitez remplacer, vous devez donc attendre que la position soit défini par l'utilisateur, cliquez dessus, puis modifiez-le.
la source
N'oubliez pas de renvoyer false juste après l'appel de fonction si vous utilisez les touches fléchées, car Chrome efface le problème autrement.
la source
return false;
. Vous voulezevent.preventDefault();
plutôt. Si vous retournez faux, vous sous-entendez ceevent.stopPropagation()
qui n'est pas toujours souhaitableSur la base de cette question , la réponse ne fonctionnera pas parfaitement pour ie et opera lorsqu'il y a une nouvelle ligne dans la zone de texte. La réponse explique comment ajuster le selectionStart, selectionEnd avant d'appeler setSelectionRange.
J'ai essayé le adjustOffset de l'autre question avec la solution proposée par @AVProgrammer et ça marche.
la source
Petite modification au code que j'ai trouvé dans bitbucket
Le code est maintenant en mesure de sélectionner / surligner avec des points de début / fin si 2 positions sont données. Testé et fonctionne très bien dans FF / Chrome / IE9 / Opera.
Le code est répertorié ci-dessous, seules quelques lignes ont été modifiées:
la source
J'ai dû faire fonctionner cela pour les éléments modifiables et jQuery et j'ai pensé que quelqu'un pourrait le vouloir prêt à utiliser:
L'utilisation
$(selector).getCaret()
renvoie l'offset numérique,$(selector).setCaret(num)
établit l'offset et définit le focus sur l'élément.Également un petit conseil, si vous exécutez à
$(selector).setCaret(num)
partir de la console, il retournera le console.log mais vous ne visualiserez pas le focus car il est établi dans la fenêtre de la console.Bests; D
la source
Vous pouvez modifier directement le prototype si setSelectionRange n'existe pas.
Lien jsFiddle
la source