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.appendChild( document.createTextNode(q) );
if(!noBr) document.body.appendChild( document.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.