Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/05/2007, 14:07
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Colocar el cursor en una caja de texto en determinada posición

Hola.

He intentado mediante un botón hacer un focus() a una caja de texto y que el cursor en vez de al final del contenido se me coloque en la posición que yo le indique. Esto me sale bien en IE y en FF, en los dos. Me serví de algún código de las FAQ.


Ahora viene el problema, cuando quiero sustituir el focus() de toda la vida por esa función. Es decir, quiero que al saltar el evento onfocus el cursor se posicione donde yo diga. En teoría es tan sencillo como incluir la función en el evento, pero no:


Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<
html>
<
head>
<
title></title>
<
meta name="Author" content="derkeNuke">
</
head>

<
body>


<
input type="text" id="caja" value="0123456789" />
<
input type="button" value="pos(3)" onclick="ponCursorEnPos(3)" />
<
br/>

<
script>

//función para escribir DEBUG
function e(q,noBr) {
    
document.body.appendChilddocument.createTextNode(q) );
    if(!
noBrdocument.body.appendChilddocument.createElement("BR") );
}


var 
laCaja=document.getElementById("caja");

//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){ 
        
e("ponCursorEnPos: Con IE coloco el cursor en la posición "+pos);
        
forzar_focus();
        var 
str document.selection.createRange(); 
        
str.move("character"pos); 
        
str.moveEnd("character"0); 
        
str.select();
    }
    else if(
typeof laCaja.selectionStart != 'undefined'){ 
        
e("ponCursorEnPos: Con Firefox u otro coloco el cursor en la posición "+pos);
        
laCaja.setSelectionRange(pos,pos); 
        
forzar_focus();
    }


function 
focus_handler() {
    
e("focus_handler: he saltado por el evento focus()");
    
ponCursorEnPos(2);
    
//setTimeout("ponCursorEnPos(2)",1000);
}

//hace el focus sin saltar el evento onfocus, es decir, sin saltar focus_handler
function forzar_focus() {
    
e("Fuerzo el focus sin que salte el evento onfocus");
    
laCaja.onfocus=null;                            //quito
    
laCaja.focus();                                    //hago
    
setTimeout("laCaja.onfocus=focus_handler",1000);    //pongo (retrasado para IE...)
}

laCaja.onfocus=focus_handler;

</script>

</body>
</html> 
Como se puede ver el botón funciona bien, pero al hacer un focus con el ratón no (en FF sí, en IE no). He tenido que añadir la función forzar_focus() para que se haga un focus() sin que salte el evento onfocus, quitándole la función antes y añadiéndosela después (en IE hay que añadirla con retardo, si no salta automáticamente).



Bueno, ¿alguna solución para esto?


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