Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/07/2007, 03:05
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: Posicion del cursor dentro de un input

Yo he estado jugando con lo mismo, y funciona en inputs, pero no lo he probado en <textarea>. Es parecido a lo que te comenta Panino ()

Bien, aquí tienes getCursorPos(campo) que fíjate en lo que te devuelve:
Código PHP:
/********
    getCursorPos: Me devuelve la posición de inicio y fin de la selección o la posición del | en el campo
********/
function getCursorPos(campo) {
    if (
document.selection) {// IE Support
        
campo.focus();                                        // Set focus on the element
        
var oSel document.selection.createRange();        // To get cursor position, get empty selection range
        
oSel.moveStart('character', -campo.value.length);    // Move selection start to 0 position
        
campo.selectionEnd oSel.text.length;                    // The caret position is selection length
        
oSel.setEndPoint('EndToStart'document.selection.createRange() );
        
campo.selectionStart oSel.text.length;
    }
    return { 
startcampo.selectionStartendcampo.selectionEnd };

Es un objeto con dos propiedades, start y end (inicio y fin de la selección en el campo. Si no hay nada seleccionado, start será igual a end, la posición del cursor en el campo. Me ha sido muy útil para el desafío1. Funciona en IE y en FF.



Luego también querías colocar el cursor en una posición dada:
Código PHP:
/********
    COLOCACIÓN DEL CURSOR: Da el foco a la caja colocando el cursor de inserción en la posición pos
********/
function ponCursorEnPos(pos){ 
    if(
typeof document.selection != 'undefined' && document.selection){        //método IE
        
var tex=laCaja.value;
        
laCaja.value=''
        
laCaja.focus();
        var 
str document.selection.createRange(); 
        
laCaja.value=tex;
        
str.move("character"pos); 
        
str.moveEnd("character"0); 
        
str.select();
    }
    else if(
typeof laCaja.selectionStart != 'undefined'){                    //método estándar
        
laCaja.setSelectionRange(pos,pos); 
        
forzar_focus();            //debería ser focus(), pero nos salta el evento y no queremos
    
}

Lo único que aquí no lo tengo en genérico, hay que utilizar la variable global laCaja, o modificar la función para pasársela por parámetro, pero esta tirado. También es para IE y FF. También es fácil modificarlo para crear selecciones, en vez de colocar el cursor. Es intuitivo (str.moveEnd("character",x) y laCaja.setSelectionRange(pos,pos+x); ).



Aviso que en Opera he leído que hay problemas, porque utiliza el método estándar, pero da true en document.selection o algo parecido...




Un saludo Calisco
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.