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>