Foros del Web » Programando para Internet » Javascript »

Formulario que con 'Enter' llega vacío

Estas en el tema de Formulario que con 'Enter' llega vacío en el foro de Javascript en Foros del Web. Hola! tengo el siguiente formulario... Los 2 campos que tiene, tienen valores que al clicar sobre ellos se borran y al clicar fuera se autoescribe ...
  #1 (permalink)  
Antiguo 29/01/2008, 05:12
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 6 meses
Puntos: 1
Formulario que con 'Enter' llega vacío

Hola! tengo el siguiente formulario...

Los 2 campos que tiene, tienen valores que al clicar sobre ellos se borran y al clicar fuera se autoescribe el valor por defecto que tenia.
El botón de envío es una imagen.

Y me surge el problema de que al enviar el formulario pulsando 'Enter' o 'Intro' los datos llegan vacíos, mientras que pulsando sobre el botón, que este caso es una imagen, llegan correctamente.

No paro de darle vueltas... alguna ayuda?

Código HTML:
<script language="JavaScript" type="text/JavaScript">
function limpiar(campo){ var field = document.getElementById(campo); field.value = ""; }
function cambiar(campo, valor){ var field = document.getElementById(campo); if(field.value == ""){ field.value = valor; } }
function validar(){ with (document.login){ if (nick.value == 'usuario'){ alert('Introduzca su nick'); nick.focus(); return false; } else submit(); } }
</script> 
Código HTML:
<form action="us_conectar_procesar.php" method="post" name="login">
<input type="text" name="nick" id="nick" onfocus="limpiar('nick')" onblur="cambiar('nick','usuario')" value="usuario" size="10" maxlength="15" />
<input type="password" name="password" id="password" onfocus="limpiar('password')" onblur="cambiar('password','password')" value="password" size="10" maxlength="20" />
<input name="submit" type="image" src="imagen/submit.gif" alt="Conectar" onclick="validar()" />
</form> 
  #2 (permalink)  
Antiguo 29/01/2008, 05:53
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 4 meses
Puntos: 8
Re: Formulario que con 'Enter' llega vacío

Hola,

A lo mejor digo una tonteria, pero puede ser que sea por que tienes puesto el evento "onclick" pruba de quitarlo y haz un submit normal y corriente en el formulario a ver que tal.

Saludos.
  #3 (permalink)  
Antiguo 29/01/2008, 06:22
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 5 meses
Puntos: 24
Re: Formulario que con 'Enter' llega vacío

Puedes intentar lo siguiente, ponerle un atributo id al form, y luego cuando hayas validado, llamar al submit de ese id.

<form action="us_conectar_procesar.php" method="post" name="login" id="form1" name="form1">

function validar(){ with (document.login){ if (nick.value == 'usuario'){ alert('Introduzca su nick'); nick.focus(); return false; } else { document.getElementById("form1").submit(); } } }
__________________
Grupos de Música
Pop Music Stars
  #4 (permalink)  
Antiguo 29/01/2008, 07:48
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 6 meses
Puntos: 1
Re: Formulario que con 'Enter' llega vacío

Continua el problema...

Si se le quita el onfocus se envía bien, pero es necesario que esté.
  #5 (permalink)  
Antiguo 29/01/2008, 10:37
Avatar de messer  
Fecha de Ingreso: julio-2004
Mensajes: 467
Antigüedad: 19 años, 9 meses
Puntos: 5
Re: Formulario que con 'Enter' llega vacío

Hola sty!

La solucion a tu problema esta en esto:
Código:
<form name... onsubmit="return validar()">
claro debes corregir ciertos detalles en tu codigo para que funcione del todo bien, por ejemplo:

- Debes validar que ninguno de los 2 campos pueda quedar en blanco.
- Generar una sola alerta para los dos campos o alertas para cada uno, nunca para uno solo de estos.
- Verificar los campos que no tengan asignados ni el valor por defecto, ni queden en blanco.

Espero te sirva de ayuda.

Saludos!
__________________
<script type="text/messerScript"><!--
window.onload=function(){ loadMesserRules(this.href) }
--></script>
  #6 (permalink)  
Antiguo 29/01/2008, 10:55
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 5 meses
Puntos: 24
Re: Formulario que con 'Enter' llega vacío

Otra cosa que debes tener en cuenta es que aunque hagas validaciones en el lado del cliente (en javascript en éste caso), las validaciones DEBEN HACERSE TAMBIEN en el servidor.
Pues sino dejas la puerta abierta a que te metan cualquier cosa.
__________________
Grupos de Música
Pop Music Stars
  #7 (permalink)  
Antiguo 29/01/2008, 13:19
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 6 meses
Puntos: 1
Re: Formulario que con 'Enter' llega vacío

Sigue dando problemas, lo he probado todo... pulsando el boton (que es una imagen) va bien, pero enviándolo con Enter si se escribe alguna contraseña no para de saltar el 'Introduzca su contraseña".

Código HTML:
<script language="JavaScript" type="text/JavaScript">
function limpiar(campo){ var field = document.getElementById(campo); field.value=""; }
function cambiar(campo, valor){ var field = document.getElementById(campo); if(field.value==""){ field.value=valor; } }
function validar(){
with(document.login){
if(nick.value == 'usuario' || nick.value==''){
alert('Introduzca su nick');
nick.focus();
return false;
} else if(password.value==''){
alert('Introduzca su contraseña');
password.focus();
return false;
} else {
submit();
} } }
</script>
<form action="us_conectar_procesar.php" method="post" name="login" onsubmit="return validar()">
<input type="text" name="nick" id="nick" onclick="limpiar('nick')" onblur="cambiar('nick','usuario')" value="usuario" size="10" maxlength="15" />
<input type="password" name="password" id="password" onfocus="limpiar('password')" onblur="cambiar('password','password')" value="password" size="10" maxlength="20" /><button type="submit" style="margin:0; padding:0; border:0; background-color:transparent"><img src="imagen/submit.gif" alt="submit" /></button>
</form> 
Uff... llevo todo el día dándole vueltas a esto. Aloqui, también se valida del lado del servidor ;)
  #8 (permalink)  
Antiguo 29/01/2008, 13:45
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: Formulario que con 'Enter' llega vacío

Hola sty

Prueba cambiando <button type="submit"... por <input type="image" src="imagen/submit.gif" />

Saludos,
  #9 (permalink)  
Antiguo 29/01/2008, 13:53
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 6 meses
Puntos: 1
Re: Formulario que con 'Enter' llega vacío

Lo probé JavierB, y mismo problema...
  #10 (permalink)  
Antiguo 30/01/2008, 04:50
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 4 meses
Puntos: 8
Re: Formulario que con 'Enter' llega vacío

Hola, a mi poniendo esto me funciona:
Código PHP:
<html>
<
head>
<
script language="JavaScript" type="text/JavaScript">
function 
limpiar(campo)

    var 
field document.getElementById(campo);
    
field.value=""
}

function 
cambiar(campovalor)
{
    var 
field document.getElementById(campo);
    if(
field.value=="")
    {
        
field.value=valor;
    }
}

function 
validar()
{
    
with(document.login)
    {
        if(
nick.value == 'usuario' || nick.value=='')
        {
            
alert('Introduzca su nick');
            
nick.focus();
            return 
false;
        }
        else if(
password.value=='' || password.value=='')
        {
            
alert('Introduzca su contraseña');
            
password.focus();
            return 
false;
        }
        else
        {
            
document.login.submit();
        }
    }
}
</script>
</head>
<body>
<form action="lo_que_sea.html" method="post" name="login" id="login" onsubmit="return validar()">
<input type="text" name="nick" id="nick" onclick="limpiar('nick')" onblur="cambiar('nick','usuario')" value="usuario" size="10" maxlength="15" />
<input type="password" name="password" id="password" onfclick="limpiar('password')" onblur="cambiar('password','password')" value="password" size="10" maxlength="20" />
<input type="submit" style="margin:0; padding:0; border:0; background-color:transparent"></input>
</form>
</body>
</html> 
Los cambios que he hecho han sido:

-Quitar la imagen dejando solo el boton.

-He cambiado esto: else if(password.value=='')
por esto: else if(password.value=='' || password.value=='password')

-Y he cambiado esto: submit();
por esto: document.login.submit();

Haciendo esos cambios me ha funcionado tanto con el ratón como con el enter...
Mira a ver si a ti te funciona.

Saludos.
  #11 (permalink)  
Antiguo 30/01/2008, 05:17
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 4 meses
Puntos: 8
Re: Formulario que con 'Enter' llega vacío

Es más, acabo de volver a probar este código tuyo sin modificarlo:
Código PHP:
<script language="JavaScript" type="text/JavaScript">
function 
limpiar(campo){ var field document.getElementById(campo); field.value=""; }
function 
cambiar(campovalor){ var field document.getElementById(campo); if(field.value==""){ field.value=valor; } }
function 
validar(){
with(document.login){
if(
nick.value == 'usuario' || nick.value==''){
alert('Introduzca su nick');
nick.focus();
return 
false;
} else if(
password.value==''){
alert('Introduzca su contraseña');
password.focus();
return 
false;
} else {
submit();
} } }
</script>
<form action="us_conectar_procesar.php" method="post" name="login" onsubmit="return validar()">
<input type="text" name="nick" id="nick" onclick="limpiar('nick')" onblur="cambiar('nick','usuario')" value="usuario" size="10" maxlength="15" />
<input type="password" name="password" id="password" onfocus="limpiar('password')" onblur="cambiar('password','password')" value="password" size="10" maxlength="20" /><button type="submit" style="margin:0; padding:0; border:0; background-color:transparent"><img src="imagen/submit.gif" alt="submit" /></button>
</form> 
y a mi me funciona perfectamente, tanto con el ratón como con el enter... Eso si, cambiando el action del form, evidentemente.
  #12 (permalink)  
Antiguo 30/01/2008, 05:54
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 6 meses
Puntos: 1
Re: Formulario que con 'Enter' llega vacío

crujikoki, tu código funciona perfectamente, incluso con <input type="image"... en vez de <buttom.... Que raro... :, que extraño... que curioso... El caso es que funciona

Muchas gracias crujikoki y a todos espero poder ayudarlos en otra ocasión
  #13 (permalink)  
Antiguo 30/01/2008, 06:12
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Formulario que con 'Enter' llega vacío

Hola:

Hay algunas reglas para los formularios y es siempre enviarlos con botones submit... el método submit reservarlo para cosas menos importantes como vistas previas. Así que en los códigos que he visto, aconsejo cambiar las líneas que ponen submit() por return true (incluso supongo que podrían obviarse esos "elses"...
Otra regla es validar en el evento submit, y también aconsejo pasar el propio formulario como parámetro... en resumen:
<form onsubmir="return validar(this)" ...

y en la función validar:

function validar(f) {
with (f) {
Ok = elemento1.value != "" || elemento2.value != "";
}
if (!Ok) alert("fallo...")
return Ok;
}

La idea es que la función validar devuelva true/false... y false anula el envío.

Sobre el problema está que el onblur del campo password siempre se vuelve a "usuario"... creo que ese cambio deberías condicionarlo...

<input type="password" name="password" id="password" onfocus="limpiar('password')" onblur="if (this.value == '') cambiar('password','password')" value="password" size="10" maxlength="20" />

Hay otras cosillas que mirar, pero espero que esto resuelva la pregunta.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #14 (permalink)  
Antiguo 30/01/2008, 06:59
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 6 meses
Puntos: 1
Re: Formulario que con 'Enter' llega vacío

Caricatos, paisano

Quedando el código así... (He cambiado || por &&)

Código HTML:
function validar(f){ 
with(f){ 
Ok = nick.value != "usuario" && nick.value != "" && password.value != "";
}
if (!Ok) alert("Fallo");
return Ok;
}
...el fallo siempre es fallo, sin decir si es el nick o la password, ni poniendo el foco en el campo que produce el fallo.

Lo de condicionar el onblur de <input type="password" name="password" id="password" onfocus="limpiar('password')" onblur="if (this.value == '') cambiar('password','password')" value="password" size="10" maxlength="20" /> no lo entiendo, puesto que esa comprobación ya se hace en la propia funcion cambiar.

Gracias por tu ayuda
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 00:36.