Foros del Web » Programando para Internet » Javascript »

problemas con el evento onblur()...

Estas en el tema de problemas con el evento onblur()... en el foro de Javascript en Foros del Web. Hola, espero me puedan ayudar...Tengo una tabla que me ayuda a dar de alta registros, unos campos deben cumplir con x requisitos, hasta ahorita lo ...
  #1 (permalink)  
Antiguo 06/06/2006, 16:55
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
problemas con el evento onblur()...

Hola, espero me puedan ayudar...Tengo una tabla que me ayuda a dar de alta registros, unos campos deben cumplir con x requisitos, hasta ahorita lo programe para q a la hora de aceptar revise los campos, si encuentra un error lo manda a pantalla(lo cual funciona perfectamente) y se posiciona en dicho campo. Ahora he empezado a reprogramar para q cada vez q se llene el campo y des un tab o te cambies con el raton a otro campo, valide si el campo q llenaste esta bien, en caso de que no se vuelve a posicionar en dicho campo.
para esto ocupo el onblur=().
He aqui mi problema:
declaro dos campos de tipo texto(estoy trabajando php con javascript)

<input name= \"plataforma\" type = \"text\" value=\"\" style=\"text-align:center\" size=\"31\" maxlength=\"30\" onblur=\"plat()\">

<input name=\"pozo\" type=\"text\" value=\"\" style=\"text-align:center\" size=\"21\" maxlength=\"20\" onblur=\"pzo()\">

el primero dice que despues de llenar mande llamar la funcion plat() y el segundo la funcion pzo().

function plat(){
if (document.alta.plataforma.value ==""){
alert ("No puedes dejar el campo PLATAFORMA"+ " vacío");
document.alta.plataforma.focus();
return false;
}
}

function pzo(){
if (document.alta.pozo.value ==""){
alert ("No puedes dejar el campo POZO"+ " vacío");
document.alta.pozo.focus();
return false;
}
}
supongamos llego al primer campo(plataforma) y no lo lleno, entonces doy tab para pasarme a el campo pozo. Aqui es donde el programa valida y detecta que el campo plataforma debe ser llenado y me manda el alert(hasta aqui funciona muy bien), se supone que si doy aceptar me debe regresar al campo plataforma para escribir, pero lo que me aparece es el mensaje del campo pozo que hay una parte que tambien valido que debe ser llenado y entonces se vuelve un ciclo, porque doy click al mensaje de pozo y me aparece el del campo plataforma y asi sucesivamente, el caso es que d aqui ya no puedo salir.

espero no haberlos hecho bolas con esto, espero puedan ayudarme y de antemano gracias.
  #2 (permalink)  
Antiguo 07/06/2006, 02:35
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hum ... se podría poner un semáforo

algo como

Código:
semaforoverde = true

function plat(){
if(semaforoverde){
   if (document.alta.plataforma.value ==""){
   semaforoverde = false
   alert ("No puedes dejar el campo PLATAFORMA"+ " vacío");
   document.alta.plataforma.focus();
   return false;
   } 
semaforoverde = true
}
}

function pzo(){ 
if(semaforoverde){
   if (document.alta.pozo.value ==""){
   semaforoverde = false
   alert ("No puedes dejar el campo POZO"+ " vacío");
   document.alta.pozo.focus();
   return false;
   } 
semaforoverde = true
}
}
No lo he probado pero así a ojo yo creo que debería funcionar
  #3 (permalink)  
Antiguo 07/06/2006, 14:03
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
tunait, gracias por contestar..
oye, ya probe y nada, lo que pasa es que ahora solo valida una vez en cualquiera de los campos(en caso de encontrar error) y despues ya no hace nada y puedes seguir llenando los demas campos. Desde mi punto de vista entra una vez ya que semaforoverde=true, pero una vez q comentes un error, le cambia la bandera a false y siento que se esta quedando con ese valor de falso y por lo tanto, ya no entra a validar en ningun caso......Tienes alguna idea de por que? gracias
  #4 (permalink)  
Antiguo 08/06/2006, 02:15
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
conchos pues tienes razón, qué tonta, eso me pasa por no probar las cosas

bueno esto sí funciona

Código:
semaforopzo = false

function plat(){
   if (document.alta.plataforma.value ==""){
   alert ("No puedes dejar el campo PLATAFORMA"+ " vacío");
   document.alta.plataforma.focus();
   return false;
   } 
semaforopzo = true
}

function pzo(){ 
if(semaforopzo){
   if (document.alta.pozo.value ==""){
   semaforoverde = false
   alert ("No puedes dejar el campo POZO"+ " vacío");
   document.alta.pozo.focus();
   return false;
   } 
}
}
si necesitas hacerlo con más campos pues agregas una variable para cada campo que se inicie en false y que se encargue el campo precedente de ponerla a true cuando se rellene.

un saludo
  #5 (permalink)  
Antiguo 08/06/2006, 08:40
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
otra opcion...

holas,

te dejo otra opcion para solucionar tu problema (lo resumí en una sola funcion, pero si fuse necesario , se podría hacer funciones individuales)

Cita:
<html>
<head>
<script>
function verif(ant){
if (document.forms[0][ant].value ==""){
alert ("No puedes dejar el campo "+ant.toUpperCase()+" vacío");
document.forms[0][ant].focus();
}
}

</script></head>

<body>
<form name="alta">
<input name= "plataforma" type = "text" value="" style="text-align:center" size="31" maxlength="30" >

<input name="pozo" type="text" value="" style="text-align:center" size="21" maxlength="20" onfocus="verif('plataforma')">

<input name="qq" type="text" value="" style="text-align:center" size="21" maxlength="20" onfocus="verif('pozo')">

<input name="aa" type="text" value="" style="text-align:center" size="21" maxlength="20" onfocus="verif('qq')">

<input onfocus="verif('aa')" name="Enviar" type="submit" value="Enviar">
</form>

</body>
</html>
saludos
__________________
by Capitán Buscapina
.
  #6 (permalink)  
Antiguo 08/06/2006, 09:10
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años
Puntos: 0
tunait y Cap. Buscapina, muchisimas gracias por su ayuda.....
Cap. Buscapina, esta interesante tu idea, la voy a probar.
tunait, investigue y lo unico q le agregue a lo que me enviaste fue un:settimeout y ya no me aparece el ciclo, no se q tan eficiente sea esto, pero me funciona.

semaforoverde=false
function plat(){
if (document.alta.plataforma.value ==""){
if (!semaforoverde){
alert ("No puedes dejar el campo PLATAFORMA"+ " vacío");
document.alta.plataforma.focus();
semaforoverde=true
setTimeout('semaforoverde=false',50)
}
}
}

Última edición por jgrc; 08/06/2006 a las 09:29
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 04:27.