Foros del Web » Programando para Internet » Javascript »

Problema extraño con focus()

Estas en el tema de Problema extraño con focus() en el foro de Javascript en Foros del Web. Buenas tardes: Tengo este código Cita: <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"> La función acceptNum3 es sólo para que ...
  #1 (permalink)  
Antiguo 03/04/2012, 11:44
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Problema extraño con focus()

Buenas tardes:
Tengo este código

Cita:
<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">
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).

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();
}
}
}

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ú
  #2 (permalink)  
Antiguo 03/04/2012, 12:42
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Problema extraño con focus()

Prueba con esto:

Código:
setTimeout(function(){document.getElementById("num_documento").focus();}, 1);
  #3 (permalink)  
Antiguo 03/04/2012, 15:02
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Problema extraño con focus()

Muchas gracias diamari funcionó bien. Aunque había encontrado otra forma pero en 2 líneas:

Cita:
self.focus();
document.getElementById("num_documento").focus();
Mil gracias!!!!!
  #4 (permalink)  
Antiguo 03/04/2012, 15:05
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Problema extraño con focus()

viendo la 3º y 4ª línea está claro que no puede funcionar. Mid es una función de vbScript. su equivalente en javascript es substr, substring, ...

por otro lado, te has planteado usar expresiones regulares o incluso una mascara de entrada??
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #5 (permalink)  
Antiguo 03/04/2012, 16:41
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Problema extraño con focus()

Hola Isabel...... pues si funciona porque hay una función que emula el Mid de VBScript

Cita:
function Mid(str, start, len) //Equivalente de la función MID de vbscript
{
if (start < 0 || len < 0) return "";
var iEnd, iLen = String(str).length;
if (start + len > iLen)
iEnd = iLen;
else
iEnd = start + len;
return String(str).substring(start,iEnd);
}

El tema de expresiones regulares y máscaras no lo había considerado, como funciona así como esta, al menos en ese aspecto, no investigué más de momento.
  #6 (permalink)  
Antiguo 03/04/2012, 17:12
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Problema extraño con focus()

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Hola Isabel...... pues si funciona porque hay una función que emula el Mid de VBScript
también hay molinos de viento que generan electricidad cuando junto a ellos se ponen a sopla 1.000.000 de personas
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #7 (permalink)  
Antiguo 03/04/2012, 17:44
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Problema extraño con focus()

No capte eso de los molinos.... sorry si soy lento
  #8 (permalink)  
Antiguo 04/04/2012, 13:28
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Problema extraño con focus()

lo que prentendí decir, sin mucho éxito, es que los métodos substr(), substring() o slice(), hacen exactamente lo mismo que hace la función que emula Mid()
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: extraño, formulario, funcion, input
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:07.