A ver si alguien puede ayudarme a sacar en claro esto. Se trata de un formulario muy simple, el cuál intento validar en dos partes, la primera para validar un máximo/mínimo de caracteres en campos de texto, y la segunda, que aún no he hecho, para una validación más exhaustiva.
Lo que pasa es lo siguiente: cuando no introduzco nada, me salen todos los mensajes de error (en este caso dos), pero al hacer clic en enviar, este botón se convierte momentáneamente en campo de texto (si copiais y ejecutais el código de abajo lo comprobareis). Y lo peor es que cuando introduzco un valor válido en el primer campo, no aparece el mensaje de error para el segundo campo, y cuando hago lo mismo solo con el segundo campo, aparece el mensaje de error para ambos. Todo esto en Firefox.
El código:
Código HTML:
<html>
<head>
<title>Untitled Document</title>
<script type="text/javascript">
/* código javascript abajo */
</script>
</head>
<body>
<form id="form1" name="formulario" method="post" action="#" onSubmit="return validate(this)">
<table width="200" border="1">
<tr>
<td>cadena</td>
<td><input type="text" name="cadena1" id="cadena1" /></td>
</tr>
<tr>
<td>alfanumerico</td>
<td><input type="text" name="alfanumerico1" id="alfanumerico1" /></td>
</tr>
</table>
<br />
<label>
<input type="submit" name="enviar" id="enviar" value="Enviar"/>
</label>
</form>
</body>
</html>
Código javascript
:
Código PHP:
var error_message = ""
function check_input(miForm, field_value, min_field_size, max_field_size, tipo, message) {
// Validación de máximos y mínimos
if (field_value == '' || field_value.length < min_field_size || field_value.length > max_field_size) {
error = true;
}
// Validación de tipo de entrada
/* ...... acciones para esta validación ....*/
if (error) {
error_message = error_message + "* " + message + "\n";
}
}
function validate(miForm) {
for (i=0; i < miForm.elements.length; i++) {
if (miForm.elements[i].type = "textfield") {
switch (miForm.elements[i].name) {
case "cadena1": check_input(miForm, miForm.cadena1.value, 5, 10, "cadena", "El campo cadena debe tener entre 5 y 10 caracteres\n")
break;
case "alfanumerico1": check_input(miForm, miForm.alfanumerico1.value, 5, 20, "alfanumerico", "El campo alfanumerico debe tener entre 5 y 20 caracteres\n")
}
}
}
alert (error_message)
return true
}