Foros del Web » Programando para Internet » Javascript »

focus() no deja el foco en el campo activo?

Estas en el tema de focus() no deja el foco en el campo activo? en el foro de Javascript en Foros del Web. tengo este codigo: me sale que el campo esta vacio pero se me pasa el foco al siguiene campo... no deberia quedarse en el campo ...
  #1 (permalink)  
Antiguo 28/11/2008, 09:27
 
Fecha de Ingreso: febrero-2007
Mensajes: 134
Antigüedad: 17 años, 2 meses
Puntos: 2
focus() no deja el foco en el campo activo?

tengo este codigo:

me sale que el campo esta vacio pero se me pasa el foco al siguiene campo...
no deberia quedarse en el campo actual que da el error?

function CampoObligatorio(campo)
{
var s = document.getElementById(campo);
if(s != null)
{
s = trim(s);
if (s.length > 0 || s.value != '')
{
return true;
}
}
alert("Este campo no puede estar vacio");
s.focus();
return false;
}
  #2 (permalink)  
Antiguo 28/11/2008, 09:28
 
Fecha de Ingreso: febrero-2007
Mensajes: 134
Antigüedad: 17 años, 2 meses
Puntos: 2
Respuesta: focus() no deja el foco en el campo activo?

quitar la linea del s = trim(s)q eu esta mal...jeje se me escapo...
  #3 (permalink)  
Antiguo 28/11/2008, 09:34
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: focus() no deja el foco en el campo activo?

Hola ironmansp

¿Cómo estás llamando a la función? ¿El campo tiene el id adecuado?

Saludos,
  #4 (permalink)  
Antiguo 28/11/2008, 09:48
 
Fecha de Ingreso: febrero-2007
Mensajes: 134
Antigüedad: 17 años, 2 meses
Puntos: 2
Respuesta: focus() no deja el foco en el campo activo?

Este es el codigo HTML:
<input type="text" maxlength="20" name="nombre_marca" id="nombre_marca" value="TOTEN" class="caja" tabindex="1" onblur="return CampoObligatorio('nombre_marca');"/>

<input type="file" name="logo" tabindex="2" /><br />
<small>Si se introduce una imagen se cambiar&aacute; la actual</small><img src="http://www.epiezas.com/v1/css/skin1/images/no_disp_marcas.gif" alt="Logo de la marca TOTEN" /> <br />

<label for="proveedor" accesskey="p">Proveedor</label><select name="proveedor " tabindex="3"><option value="0">Seleccionar</option><option value="1" selected="selected">infostock</option><option value="2" >DAT</option></select><br /> <label for="visible" accesskey="n">Visible (S/N)</label>


function CampoObligatorio(campo)
{
var s = document.getElementById(campo);
if(s != null)
{
s.value = trim(s.value);
if (s.length > 0 || s.value != '')
{
return true;
}
}
alert("Este campo no puede estar vacio");
s.focus();
return false;
}

Haga lo que haga, el foco se pasa al campo logo.. he probado con onblur onchange y onfocus como condicion del input text...
  #5 (permalink)  
Antiguo 28/11/2008, 10:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: focus() no deja el foco en el campo activo?

En Firefox no se puede (que yo sepa) cancelar la acción del evento onblur, y por un lado creo que es lo mejor, sería incómodo para el usuario no poder salir del campo . Puedes dejar un aviso de que el campo está mal, pero no sería bueno atajarlo en el campo. Es mi opinión.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 28/11/2008, 10:10
 
Fecha de Ingreso: febrero-2007
Mensajes: 134
Antigüedad: 17 años, 2 meses
Puntos: 2
Respuesta: focus() no deja el foco en el campo activo?

lo que quiero es que se posiciones en el campo que da error y se quede en el, en este caso es nombre_marca..
  #7 (permalink)  
Antiguo 28/11/2008, 10:14
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: focus() no deja el foco en el campo activo?

Y es exactamente a eso a lo que yo me refiero, en Firefox no se puede impedir que el usuario salga del campo en el evento onblur aunque el dato que introdujo sea incorrecto.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 28/11/2008, 10:17
 
Fecha de Ingreso: febrero-2007
Mensajes: 134
Antigüedad: 17 años, 2 meses
Puntos: 2
Respuesta: focus() no deja el foco en el campo activo?

entonces como lo hace la gente ? yo lo he visto hacer y no se me pasaba de campo...
  #9 (permalink)  
Antiguo 28/11/2008, 10:20
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: focus() no deja el foco en el campo activo?

¿En Firefox? . ¿Podrías decirnos en qué página lo viste? Yo también quiero saber cómo se hace.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 28/11/2008, 10:24
 
Fecha de Ingreso: febrero-2007
Mensajes: 134
Antigüedad: 17 años, 2 meses
Puntos: 2
Respuesta: focus() no deja el foco en el campo activo?

si me acordara lo habria cogido..jeje... pero si he visto formularos donde no te deja pasar cuando el campo no es correcto...sin tener que darle al boton de enviar... sino directamente segun metes los datos...


si lo pillo lo pongo...,pero sinceramente no me acuerdo... aunque me temo que igual lo hacen a traves de ajax...
  #11 (permalink)  
Antiguo 28/11/2008, 17:15
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: focus() no deja el foco en el campo activo?

NO sé si tiene que ver con la función focus() porque es un código que he cogido de un ejemplo, y aparece esa función.
El caso es que en el ejemplo si un campo está vacío sale una alerta, indicando que está vacío, pero no se envía el formulario...én mi ejemplo sale la alerta, y al aceptar la alerta, envía el form, con lo que se recarga la página, y vuelve a aparecer el form de nuevo, pero vacío, y el usuario tiene que volver a rellenar los campos.
¿Cómo hago para que no suceda esto y no se envíe el form hasta que se presiona el submit y están todos los campos rellenados??

Mi código HTML es este :

Código HTML:
<script language="JavaScript1.2" src="validar.js">
</script>

<form action="registrar.php" method="post" name="fregistro" enctype="multipart/form-data">
			
Nombre de usuario <input name="login" size="12" type="text" /> Contrase&ntilde;a  <input name="password" size="15" type="password" />
Confirmar contrase&ntilde;a:<input name="password1" size="15" type="password" /> 
Nombre  <input name="nombre" size="25" type="text" />
Apellidos <input name="apellidos" size="40" type="text" />
Direcci&oacute;n <textarea cols="20" name="direccion" rows="4"></textarea>
Correo electr&oacute;nico <input name="email" size="30" type="text" />
<input type="submit" value="REGISTRARSE" name="registrar" onclick="valida_envia()" class="boton">
<input type="reset" value="BORRAR" name="borrar" class="boton"> 
Y en el archivo JavaScript tengo esto:
Código:
function valida_envia(){ 
    //valido el nombre 
    if (document.fregistro.login.value.length==0){ 
       alert("¡ERROR! Tiene que escribir un nombre de usuario") 
       document.fregistro.login.focus() 
       return 0; 
    } 
    
    if (document.fregistro.password.value.length==0){ 
       alert("¡ERROR! Escriba una constraseña en el campo Contraseña") 
       document.fregistro.password.focus() 
       return 0; 
    } 
    if (document.fregistro.password1.value.length != document.fregistro.password.value.length){ 
       alert("¡ERROR! Las contraseñas no tienen el mismo número de caracteres") 
       document.fregistro.password1.focus() 
       return 0; 
    } 
    
    if (document.fregistro.nombre.value.length==0){ 
       alert("¡ERROR! Escriba su nombre en el campo Nombre") 
       document.fregistro.nombre.focus() 
       return 0; 
    } 

    if (document.fregistro.apellidos.value.length==0){ 
       alert("¡ERROR! Escriba sus apellidos en el campo Apellidos") 
       document.fregistro.apellidos.focus() 
       return 0; 
    } 

    if (document.fregistro.direccion.value.length==0){ 
       alert("¡ERROR! Tiene que escribir su dirección en el campo Dirección") 
       document.fregistro.direccion.focus() 
       return 0; 
    } 
    
    if (document.fregistro.email.value.length==0){ 
       alert("¡ERROR! Tiene que escribir una dirección de correo electrónico") 
       document.fregistro.email.focus() 
       return 0; 
    } 
    //el formulario se envia 
    alert("Muchas gracias por enviar el formulario"); 
    document.fregistro.submit(); 
}
¿Alguna ayuda??
  #12 (permalink)  
Antiguo 28/11/2008, 18:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: focus() no deja el foco en el campo activo?

Hola scout_vlc. Cuando tengas una duda, es preferible que abras un nuevo tema.

En cuanto a tu problema, podría solucionarse cambiando tu input type a button, pero no lo recomiendo.

Mejor, haz lo siguiente, en lugar de usar el evento onclick del input, usa el evento onsubmit del formulario, coloca "return valida_envia()", luego, en tu función valida_envia() cambia todos los "return 0" por "return false" y quita la última línea "document.fregistro.submit()". Es mejor así porque es accesible, sin Javascript, aún se puede enviar el formulario.

Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 28/11/2008, 20:19
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: focus() no deja el foco en el campo activo?

NO FUNCIONA :(

¿Tiene algo que ver que el código HTML esté en una plantilla smarty, que le llamo desde una página PHP? No creo..porque antes ocurría eso, saltaba la alerta, pero me enviaba el form.
Ahora no me sale nada....
puse esto:
<script language="JavaScript1.2" src="validar.js">
</script>

Código HTML:
<form action="registrar.php" onsubmit="return valida_envia()" method="post" name="fregistro" enctype="multipart/form-data">
			
...los campos...
<input type="submit" value="REGISTRARSE" name="registrar" class="boton">
<input type="reset" value="BORRAR" name="borrar" class="boton"></form> 
Y en el archivo 'validar.js' tengo como me dijiste:

Código:
function valida_envia(){ 
    if (document.fregistro.login.value.length==0){ 
       alert("¡ERROR! Tiene que escribir un nombre de usuario") 
       document.fregistro.login.focus() 
       return 0; 
    } 
    
    if (document.fregistro.password.value.length==0){ 
       alert("¡ERROR! Escriba una constraseña en el campo Contraseña") 
       document.fregistro.password.focus() 
       return false; 
    } 
    if (document.fregistro.password1.value.length != document.fregistro.password.value.length){ 
       alert("¡ERROR! Las contraseñas no tienen el mismo número de caracteres") 
       document.fregistro.password1.focus() 
       return false; 
    } 
    
    if (document.fregistro.nombre.value.length==0){ 
       alert("¡ERROR! Escriba su nombre en el campo Nombre") 
       document.fregistro.nombre.focus() 
       return false; 
    } 

    if (document.fregistro.apellidos.value.length==0){ 
       alert("¡ERROR! Escriba sus apellidos en el campo Apellidos") 
       document.fregistro.apellidos.focus() 
       return false; 
    } 

    if (document.fregistro.direccion.value.length==0){ 
       alert("¡ERROR! Tiene que escribir su dirección en el campo Dirección") 
       document.fregistro.direccion.focus() 
       return false; 
    } 
    
    if (document.fregistro.email.value.length==0){ 
       alert("¡ERROR! Tiene que escribir una dirección de correo electrónico") 
       document.fregistro.email.focus() 
       return false; 
    } 
    //el formulario se envia 
    return confirm('Al registrarse ha aceptado las condiciones de HoyCocinasTu.com ¿Desea formalizar el registro?')"
    alert("Muchas gracias por enviar el formulario"); 
}
Aunque deje todo el formulario en blanco, y le dé a enviar....recarga la página, ni siquiera me lleva a 'registrar.php'
¿Alguna sugerencia? mil gracias!
  #14 (permalink)  
Antiguo 28/11/2008, 20:32
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: focus() no deja el foco en el campo activo?

Antes que nada, no uses el atributo language para el tag <script>, usa type (type="text/javascript"). No es normal que se recargue la página sin siquiera enviar el formulario. ¿Podrías poner un enlace a tu página para que la veamos?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #15 (permalink)  
Antiguo 29/11/2008, 03:28
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: focus() no deja el foco en el campo activo?

OK!
Es una página de la Universidad, porque es para el proyecto,
http://al073568.al.nisu.org/registro.php
Muchas gracias!
  #16 (permalink)  
Antiguo 29/11/2008, 18:39
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: focus() no deja el foco en el campo activo?

En la penúltima línea de tu función te sobra una comilla ("): return confirm('...')".
Además, lo que está en la última línea nunca se mostrará ya que en la línea anterior estás haciendo un return.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #17 (permalink)  
Antiguo 29/11/2008, 19:25
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: focus() no deja el foco en el campo activo?

MIL GRACIAS!!!!! Lo de David el Grande veo que no sólo es un nick ;)
Llevo tantas horas con el proyecto que ya no veo las comilas, los puntos y comas....
Ya funciona genial :)
gracias!!!
àlex
  #18 (permalink)  
Antiguo 30/11/2008, 17:17
 
Fecha de Ingreso: febrero-2007
Mensajes: 134
Antigüedad: 17 años, 2 meses
Puntos: 2
Respuesta: focus() no deja el foco en el campo activo?

hacerlo en el submit requiere entonces que en ciertos formularios mios la condicion sea gigante porque pregunto alrededor de 40 campos con condiciones cada uno...
os podeis imaginar el:
return Campoobligatorio(campo1) && campoobligatorio(campo3)....etc...
  #19 (permalink)  
Antiguo 30/11/2008, 20:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: focus() no deja el foco en el campo activo?

Puedes mejorar tu función, de modo que en lugar de recibir como parámetro el campo a validar, recorra todos los campos y los valide (podrías poner algo en el name o en el id que indique que el campo sea obligatorio) Como ejemplo, puedes revisar este script hecho por tunait: http://www.tunait.com/javascript/?s=...dorformularios
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
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 16:49.