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>
Bueno, ¿alguna solución para esto?
Gracias por vuestros mensajes.