Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/02/2013, 16:41
sycrox2
 
Fecha de Ingreso: diciembre-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 1
Respuesta: deshabilitar boton hasta completar campos

Aquí está el código de emprear con algunas correcciones para que no detecte los espacios que comentaba y también para arreglar un pequeño detalle (el botón se habilitaba al escribir únicamente en el último campo); en mi opinión es algo inseguro dejar la validación sólo en el lado del cliente, así que debería también procurar hacerla en el servidor.

Para controlar lo de espacios en blanco(barra espaciadora), utilicé el replace(/\s/g,'') donde /\s/g es una pequeña expresión regular que saca todos los espacios en blanco dentro de una cadena

Código:
<html>
<head>
<title>submit disabled</title> 
<script type="text/javascript">
	var habilita = 0;
			
	function camposHijos(){
		var cont = 0;
		for(var i = 0; i < document.f1.children.length-1; i++){
			if(document.f1.children[i].className == 'campo'){
				cont+=1;
			}
		}
		return cont;
	}
	
	function activar() {
		for(var i = 0; i < document.f1.children.length-1; i++){
			if(document.f1.children[i].className == 'campo'){
				if(document.f1.children[i].value.replace(/\s/g,'') != '')
					habilita+= 1;
				else 
					habilita = 0;
			}
		}
		if(habilita >= camposHijos())
			document.getElementById('enviar_datos').disabled = '';
		else
			document.getElementById('enviar_datos').disabled = 'disabled';	
	}
</script>
</head>
<body>
<form action="recibe_datos.php" name="f1" method="post">
	<input type="text" name="fecha" class="campo" id="fecha" onkeyup="activar();"/><br>
	<input type="text" name="hora" id="hora" class="campo" onkeyup="activar();"/><br>
	<input type="text" name="usuario" id="usuario" class="campo" onkeyup="activar();"/><br>
	<textarea name="descripcion" id="descripcion" class="campo" onkeyup="activar();"></textarea><br>
	<input type="submit" value="enviar datos" name="enviar_datos" id="enviar_datos" disabled/>
</form> 
</body>
</html>

Última edición por sycrox2; 01/02/2013 a las 16:53