Habilitar submit con javascript
Tengo un form donde importo un archivo y lo imprimo en pantalla marcando un borde rojo si hay errores para que el usuario los corrija, el tema es que quiero que se habilite el submit cuando este todo correcto.
Estoy usando esta función pero no se como ponerle que si todos los input o algunos no están en rojo habilite el submit
<script> function desactivo_submit() { var x = document.forms["form"].elements; var desactivar = true; for (var i = 0; i < x.length; i++) { if (x.value.length ==0) desactivar = false; } if (desactivar) { document.getElementById('submit').disabled = false; } else { document.getElementById('submit').disabled = 'disabled'; } } </script>
Mi problema esta en el ==0 creo, ahí quiero ponerle que si el estilo del input es "border:2px solid #cc0000;" lo desactive.
Espero haber sido claro.
1 respuesta
Y si enseñas el botón solo cuando el formulario este correcto. Podrías hacer que el estilo del botón tenga "display none" por defecto desde el inicio, y cuando valide el formulario, modificar este estilo a inline u otro cuando no existan errores
<script>
function desactivo_submit()
{
var por = document.forms["form"].elements;
var desactivar = true;
for (var i = 0; i < por.length; i++) {
if (por.value.length ==0) desactivar = false;
}
if (desactivar) {
document.getElementById('submit').style.display= "none";
}
else {
document.getElementById('submit').style.display= 'inline';
}
}
</script>
Hola, gracias por la ayuda y disculpa la demora.
Me gusto esa opción pero no la pude hacer andar, cambie el estilo del botón y no me lo muestra pero al modificar los errores no me aparece de nuevo.
Así tengo el botón.
<div id="botonera"> <input type='submit' name="guardar" id='guardar' value='Guardar datos' class='boton' onclick='saltar();'/><input type="button" value="Volver" id="volver" class="boton" onclick="saltar(); self.location.href='importar.php'" /> </div
Y el script puse el que me pasaste.
Gracias
Me olvidaba, estos son los input donde imprimo el archivo importado, lo valido y coloreo con rojo los errores.
<tr> <td><input type="text" onKeyup="desactivo_submit()" name="<?php echo ("trab_apellido".$i);?>" id="<?php echo ("trab_apellido".$i);?>" value="<?php echo $apellido; ?>" style="border:0px; width: 80px;<?php if(!(preg_match("/^([a-z ñáéíóú ÑÁÉÍÓÚ ]{2,50})$/i",$apellido))){ echo "border:2px solid #cc0000;";} ?>" onblur="valida_apellido(<?php echo $i; ?>); esconde(<?php echo $i; ?>);" ></td> <td><input type="text" onKeyup="desactivo_submit()" name="<?php echo ("trab_nombre".$i); ?>" id="<?php echo ("trab_nombre".$i); ?>" value="<?php echo $nombre; ?>" style="border:0px; width: 80px;<?php if(!(preg_match("/^([a-z ñáéíóú ÑÁÉÍÓÚ ]{2,50})$/i",$nombre))){ echo "border:2px solid #cc0000;";} ?>" onblur="return valida_nombre(<?php echo $i; ?>);" /></td> <td><input type="text" onKeyup="desactivo_submit()" name="<?php echo ("trab_cuil".$i); ?>" id="<?php echo ("trab_cuil".$i); ?>" value="<?php echo $cuil; ?>" style="border:0px; width: 80px;<?php if(!cuitValido($cuil)){ echo "border:2px solid #cc0000;";}?>" onblur="return valida_cuil(<?php echo $i; ?>);" /></td> <td><input type="text" onKeyup="desactivo_submit()" name="<?php echo ("trab_basico".$i); ?>" id="<?php echo ("trab_basico".$i); ?>" value="<?php echo $basico; ?>" style="border:0px; width: 80px; text-align:right;<?php if(!is_numeric($basico)){ echo "border:2px solid #cc0000;";} ?>" onblur="return valida_basico(<?php echo $i; ?>);"/></td> <td><input type="text" onKeyup="desactivo_submit()" name="<?php echo ("trab_bruto".$i); ?>" id="<?php echo ("trab_bruto".$i); ?>" value="<?php echo $bruto; ?>" style="border:0px; width: 80px; text-align:right;<?php if(!is_numeric($bruto)){ echo "border:2px solid #cc0000;";} ?>" onblur="return valida_bruto(<?php echo $i; ?>);"/></td> <td><input type="text" onKeyup="desactivo_submit()" name="<?php echo ("trab_afiliado".$i); ?>" id="<?php echo ("trab_afiliado".$i); ?>" value="<?php echo $afili; ?>" style="border:0px; width: 50px; text-align:center;<?php if(trim((string)$afili) !== "0" && trim((string)$afili) !== "1"){ echo "border:2px solid #cc0000;";} ?>" onblur="return valida_afiliado(<?php echo $i; ?>);" maxlength="1"/></td> </tr>
Gracias
El id del botón es 'guardar', nosotros estamos buscando en el script el botón con id "submit".
En las líneas
document.getElementById('submit').style.display= 'inline';
y
document.getElementById('submit').style.display= "none";
Modifica la palabra 'submit' por el valor del id del botón (que en este caso es 'guardar')
Intenta con esto:
<html>
<head>
<title>jjsjas</title>
<script>
function desactivo_submit(){
var por = document.forms["form"].elements;
var desactivar = true;
for (var i = 0; i < por.length; i++) {
if (por.value.length ==0){
desactivar = false;
}
}
if (!desactivar) {
document.getElementById('guardar').style.display= "none";
}else {
document.getElementById('guardar').style.display= 'inline';
}
}
</script>
</head>
<body>
<form id="form" method="post">
<table border="1">
<tr>
<td><input type="text" onblur="desactivo_submit()" name="<?php echo ("trab_apellidoa");?>" id="<?php echo ("trab_apellido");?>" value="<?php echo "ja ja"; ?>" ></td>
<td><input type="text" onblur="desactivo_submit()" name="<?php echo ("trab_nombre"); ?>" id="<?php echo ("trab_nombre"); ?>" value="<?php echo "jojo"; ?>" /></td>
<td><input type="text" onblur="desactivo_submit()" name="<?php echo ("trab_cuil"); ?>" id="<?php echo ("trab_cuil"); ?>" value="<?php echo "jojo"; ?>" /></td>
<td><input type="text" onblur="desactivo_submit()" name="<?php echo ("trab_basico"); ?>" id="<?php echo ("trab_basico"); ?>" value="<?php echo "jojo"; ?>" /></td>
<td><input type="text" onblur="desactivo_submit()" name="<?php echo ("trab_bruto"); ?>" id="<?php echo ("trab_bruto"); ?>" value="<?php echo "jojo"; ?>" /></td>
<td><input type="text" onblur="desactivo_submit()" name="<?php echo ("trab_afiliado"); ?>" id="<?php echo ("trab_afiliado"); ?>" value="<?php echo "jojo"; ?>" maxlength="1"/></td>
</tr>
</table>
<div id="botonera">
<input type='submit' name="guardar" id='guardar' value='Guardar datos' class='botón' onclick='saltar();'/><input type="button" value="Volver" id="volver" class="botón" onclick="saltar(); self.location.href='importar.php'" />
</div>
</form>
</body>
</html>
Lo importante acá es el botón submit (que su id sea referenciado correctamente)
Y que la función javascript se anote de manera integra.
Si copias y pegas este código tendría que funcionar como esperamos.
Saludos!
Claro, pero yo en el value traigo los datos del archivo que el usuario importa.
El tema es así, yo tengo un form donde solo hay un botón de importar, ahí tomo el archivo que el usuario sube, almaceno en variables los datos separados por coma y lo imprimo en una tabla validando con expresiones regulares y funciones (en PHP) y coloreo con rojo los datos mal cargados que hay en el .txt para que el usuario corrija los errores. Una vez todo corregido quiero que se habilite o aparezca el submit, o en caso de que el archivo no tenga errores aparezca de una.
Gracias
Entiendo:
Lo que sucede es que para validar solo el javascript elimine muchas de las cosas que habías elaborado (ya que no manejo la base de datos desde donde rescatas la información)
Mantén tal cual el los campos (a excepción de modificar el evento onkeyup por onblur para mejorar la efectividad) el formulario si o si tiene que llamarse "form" y la función desactivo_submit() la copias tal cual te la entregué. No tendría que haber problemas.
Hice tal cual lo que me indicas pero sigue sin funcionar, lo único que cambie fue el "form" por "formulario" ya que en mi caso tengo id y name del form como "formulario"
<script> function desactivo_submit(){ var por = document.forms["formulario"].elements; var desactivar = true; for (var i = 0; i < por.length; i++) { if (por.value.length ==0){ desactivar = false; } } if (!desactivar) { document.getElementById('guardar').style.display= "none"; }else { document.getElementById('guardar').style.display= 'inline'; } } </script>
En los input no puede haber nada que este alterando el funcionamiento? La verdad que no entiendo porque no aparece.
Gracias y disculpa...
Me faltó un detalle en la función, intenta con esta versión:
function desactivo_submit(){
var por = document.forms["formulario"].elements;
var desactivar = true;
for (var i = 0; i < por.length; i++) {
if (por.value.length ==0){
desactivar = false;
}
}
if (!desactivar) {
document.getElementById('guardar').style.display= "none";
}else {
document.getElementById('guardar').style.display= 'inline';
}
}
Lo que sucede es que el sitio está cambiando algunos caracteres del programa por eso cada vez que te envío una version del script esta aparece mal.
En la linea
if (por.value.length ==0){
modifícala por
if (por [ i ].value.length ==0){
Se entiende que por es un arreglo lo que tendrías que hacer es unir la sintaxis
Si sigue llegando con problemas dame un correo al cual entregar la función sin detalles
Gracias por la paciencia! je! Ahí anduvo, pero hay algo mas.
Si el archivo no contiene ningún error no aparece el submit.
Ahí depende de la inicialización que tienes del botón, antes de ejecutar la función desactivo-submit tienes que tener alguna instancia donde valides el resultado del archivo y ahí tienes que volver a validar si es correo que haga aparecer el botón.
Te lo comento así ya que hasta el momento solo he utilizado esa función y esta se ejecuta en el momento de interactuar con el formulario, desconozco como evalúas la integridad del archivo a penas se carga.
- Compartir respuesta