2010-11-03 4 views
26

Y a-t-il un moyen dans jQuery d'obtenir la position actuelle du curseur dans une entrée de texte sans faire de mauvais code spécifique au navigateur?jQuery: Obtenir la position du curseur en entrée sans code spécifique au navigateur?

Comme dans:

<input id="myTextInput" type="text" value="some text" > 

le curseur étant après le "x" de "texte", je peux obtenir "8"?

+0

liés: http://stackoverflow.com/questions/2897155/get-caret-position-within-an- text-input-field –

+0

Désolé, le champ de saisie n'apparaissait pas au début. Cela devrait dire ce que je veux. – Ansgar

Répondre

32

Vous ne pouvez pas faire cela sans certains code spécifique au navigateur, car ils implémentent la sélection de texte variée légèrement différemment. Cependant, il y a des plugins qui résument cela. Pour exactement ce que vous cherchez, il y a le jQuery Caret (jCaret) plugin.

You can try out a demo here.

Pour votre code pour obtenir la position que vous pourriez faire quelque chose comme ceci:

$("#myTextInput").bind("keydown keypress mousemove", function() { 
    alert("Current position: " + $(this).caret().start); 
}); 

You can test it here.

+3

Ce lien de Jquery Caret http://plugins.jquery.com/project/jCaret est en panne. –

+3

Lien vers le projet jCaret sur Google Code [http://code.google.com/p/jcaret](http://code.google.com/p/jcaret) –

+0

@nickcraver Ne fonctionne pas sur mon code. Dois-je ajouter une autre source comme ? –

15

Avertissement concernant le plugin JQuery Caret.

Il sera en conflit avec le Masked Input plugin (ou vice versa). Heureusement, le plugin Masked Input inclut sa propre fonction caret(), que vous pouvez utiliser de manière très similaire au plugin Caret pour vos besoins de base - $ (élément) .caret(). Begin ou .end

+1

En outre, les numéros jsfiddle ne semblent pas correct dans le cas où l'on pourrait appuyer sur les touches bas/haut. Le curseur bascule jusqu'à la fin de la zone de texte, mais la valeur n'est pas représentative de ces déplacements vers le début/la fin de l'entrée. – fooledbyprimes

11

Utilisation de la syntaxe text_element.selectionStart nous pouvons obtenir la position de départ de la sélection d'un texte en termes de l'index du premier caractère du texte sélectionné dans le text_element.value et dans le cas où nous voulons obtenir la même chose du dernier caractère de la sélection, nous devons utiliser text_element.selectionEnd .

utiliser comme suit:

<input type=text id=t1 value=abcd> 
<button onclick="alert(document.getElementById('t1').selectionStart)">check position</button> 

Je vous donne la fiddle_demo

+0

Pourquoi vous ennuyez-vous de mettre el.value dans var val? Abréviation d'un tel terme explicite pour ne l'utiliser qu'une seule fois semble juste confondre le code autrement agréable (je ne l'ai pas encore couru :) – LeeGee

+0

@LeeGee vrai et donc réduit le code. –

+2

Excellente solution! Ça ne marche pas dans IE8, mais on s'en fout! – pmrotule

Questions connexes