Tengo este código
Cita:
La función acceptNum3 es sólo para que acepte números y guiones, nada más. La función modificaciones pone un valor en un campo hidden que esta al final del formulario (con o sin esta función el problema persiste).<input type="text" id="num_documento" name="num_documento" size="20" maxlength="20" onKeyPress="return acceptNum3(event);" onChange="verificarFormatoDoc(this.value); modificaciones();" class="texto_amarillo" autocomplete="off">
Ahora, la función verificarFormatoDoc verifica que tenga el formato de 4 dígitos, guión y 8 dígitos en ese orden. Esta es la función
Cita:
function verificarFormatoDoc(numDoc)
{
var serie=Mid(numDoc,0,4);
var guion=Mid(numDoc,4,1)
var dato="";
var contador=0;
var msje="";
var numErrores=0;
for (var iCont = 0 ; iCont < numDoc.length ; iCont++)
{
dato=Mid(numDoc, iCont, 1);
if(dato=="-")
{contador=contador+1;}
}
if(guion != "-")
{
msje="El número de serie no es correcto. Debe tener 4 carácteres y luego un guión.\n"
numErrores=numErrores+1;
}
if(contador > 1)
{
msje=msje+"El número del documento no es correcto. Sólo debe haber un guíon y debe estar entre el número de serio y el número secuencial del documento.";
numErrores=numErrores+1
}
if(numErrores > 0)
{
if(numErrores == 1)
{
alert("Se ha detectado el siguiente error:\n"+msje);
document.registros.num_documento.value="";
document.getElementById("num_documento").focus();
}
else
{
alert("Se han detectado los siguientes erroes:\n"+msje);
document.registros.num_documento.value="";
document.getElementById("num_documento").focus();
}
}
}
{
var serie=Mid(numDoc,0,4);
var guion=Mid(numDoc,4,1)
var dato="";
var contador=0;
var msje="";
var numErrores=0;
for (var iCont = 0 ; iCont < numDoc.length ; iCont++)
{
dato=Mid(numDoc, iCont, 1);
if(dato=="-")
{contador=contador+1;}
}
if(guion != "-")
{
msje="El número de serie no es correcto. Debe tener 4 carácteres y luego un guión.\n"
numErrores=numErrores+1;
}
if(contador > 1)
{
msje=msje+"El número del documento no es correcto. Sólo debe haber un guíon y debe estar entre el número de serio y el número secuencial del documento.";
numErrores=numErrores+1
}
if(numErrores > 0)
{
if(numErrores == 1)
{
alert("Se ha detectado el siguiente error:\n"+msje);
document.registros.num_documento.value="";
document.getElementById("num_documento").focus();
}
else
{
alert("Se han detectado los siguientes erroes:\n"+msje);
document.registros.num_documento.value="";
document.getElementById("num_documento").focus();
}
}
}
Como ven al final de los alert hay un llamado a focus() para que, luego de borrar el dato ingresado, se mantenga el foco en ese campo, sin embargo no funciona. Siempre, luego de hacer clic en el botón ACEPTAR del alert, salta al siguiente campo. Eso si, borra el contenido del campo.
He probado con una llamada simple del tipo document.nombredelformulario.num_documento.focus() ; pero es lo mismo.
¿alguna idea?
Muchas gracias por el apoyo
Un saludo desde Lima, Perú