2010-11-03 47 views
26

¿Hay alguna manera en jQuery de obtener la posición actual del cursor en una entrada de texto sin hacer un código específico del navegador?jQuery: Obtener la posición del cursor del texto en la entrada sin el código específico del navegador?

Como en:

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

el cursor después de estar en la "x" de "texto", yo puede conseguir "8"?

+0

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

+0

Lo sentimos, el campo de entrada no se mostraba al principio. Eso debería decir lo que quiero. – Ansgar

Respuesta

32

No se puede hacer esto sin un código específico del navegador, ya que implementan la selección de texto variado de forma ligeramente diferente. Sin embargo, hay complementos que resumen esto. Para saber exactamente lo que buscas, está el jQuery Caret (jCaret) plugin.

You can try out a demo here.

Para su código para obtener la posición que podría hacer algo como esto:

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

You can test it here.

+3

Este enlace de Jquery Caret http://plugins.jquery.com/project/jCaret está abajo. –

+3

Enlace al proyecto jCaret en Google Code [http://code.google.com/p/jcaret](http://code.google.com/p/jcaret) –

+0

@nickcraver No funciona en mi código. ¿Debo agregar otra fuente como ? –

15

Una advertencia sobre el complemento Jquery Caret.

Entrará en conflicto con Masked Input plugin (o viceversa). Afortunadamente, el complemento de Entrada enmascarada incluye una función propia de caret(), que puede usar de manera muy similar al complemento Caret para sus necesidades básicas - $ (elemento) .caret(). Begin o .end

+1

Además, los números jsfiddle no se ven correctos en el caso de que se presionen las teclas de abajo/arriba. El cursor se mueve al final del cuadro de texto, pero el valor no es representativo de dichos movimientos al inicio/final de la entrada. – fooledbyprimes

11

Uso de la sintaxis text_element.selectionStart podemos obtener la posición de inicio de la selección de un texto en términos del índice del primer carácter del texto seleccionado en el text_element.value y en caso de que deseemos obtener el mismo del último carácter en la selección tenemos que usar text_element.selectionEnd .

utilizarlo como sigue:

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

Te estoy dando la fiddle_demo

+0

¿Por qué te molestas en poner elvalor en var val? La abreviatura de un término tan explícito para usarlo solo una vez parece confundir el código que de otro modo sería bueno (no lo he ejecutado :) – LeeGee

+0

@LeeGee cierto y, por lo tanto, redujo el código. –

+2

¡Gran solución! No funciona en IE8, pero a quién le importa! – pmrotule

Cuestiones relacionadas