javascript - seleccionar - Cómo establecer la posición del cursor al final del texto de entrada en Google Chrome
quitar foco textbox c# (4)
Estoy intentando colocar el cursor en un campo de texto con una función de enfoque. He investigado un poco, pero ninguna de las soluciones proporcionadas parece funcionar en Google Chrome. En Internet Explorer y Firefox esta solución funciona bien:
El js:
$(''#Search'').focus(function() {
var SearchInput = $(''#Search'');
var strLength= SearchInput.val().length;
SearchInput.focus();
SearchInput[0].setSelectionRange(strLength, strLength);
});
El HTML:
<input type="text" id="Search" value="Hello World" />
Aquí está el enlace a mi jsfiddle .
¿Hay alguna manera de hacer que esto funcione en Google Chrome también?
Para su información, actualmente la entrada del número no es compatible con setSelectionRange()
, por lo que una solución rápida es simplemente seleccionar el texto usando .select()
. En los navegadores de escritorio, esto resalta el texto, en los móviles mueve el cursor hasta el final del texto.
Parece que el evento de enfoque se dispara antes de que se coloque el cursor cuando enfocas una entrada, una solución hacky sería usar un setTimeout así:
$(''#Search'').focus(function() {
setTimeout((function(el) {
var strLength = el.value.length;
return function() {
if(el.setSelectionRange !== undefined) {
el.setSelectionRange(strLength, strLength);
} else {
$(el).val(el.value);
}
}}(this)), 0);
});
Pruebe este violín: http://jsfiddle.net/esnvh/26/
Editado a un tiempo de espera de 0 ms, como @SparK señaló que esto es suficiente para pasar al final de la cola de ejecución.
Use el evento mouseup para eso:
$("#Search").mouseup(function () {
this.setSelectionRange(this.value.length, this.value.length);
});
Código actualizado
Referencia: http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
setSelectionRange
no es compatible con IE, Opera y Safari
Te sugiero que hagas algo como esto (funciona en IE, Chrome, Safari, Firefox).
$(''#Search'').on(''mouseup'', function() {
var element = $(this)[0];
if (this.setSelectionRange) {
var len = $(this).val().length * 2;
element.setSelectionRange(len, len);
}
else {
$(this).val($(this).val());
$(this).focus();
}
element.scrollTop = 9999;
});
Prueba esto: http://jsfiddle.net/r5UVW/4/