Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/06/2005, 19:47
kepawe
 
Fecha de Ingreso: agosto-2004
Mensajes: 157
Antigüedad: 20 años, 6 meses
Puntos: 5
Hola de nuevo.

No me he dado cuen , hay una manera más practica , no es necesario utilizar prototype de Function, básicamente es lo mismo de antes.

Código:
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--

// Enviamos el objeto y las variables 
 function start_countdown(obj,n){
  
  // añadimos propiedades al objeto para almacenar las variables
  obj.const_n = n;
  obj.n = n + 1;
  obj.ctrl;
  // Asignamos la función al objeto
  obj.count_down = function(){
      // Evitamos que el usuario acelere la cuenta atrás
      this.onclick = "new Function(return false)";
      this.n--;
      this.innerHTML = this.n;
      // Si a terminado la cuenta atrás volvemos a permitir la cuenta atrás
      if(this.n == 0){ 
      	this.innerHTML = this.n + " Haz click para iniciar la cuenta atrás otra vez.";
      	this.onclick = function(){
                  this.n = this.const_n + 1;
                  this.count_down();
      		
      	}
      }
      if(this.n > 0) this.ctrl = window.setTimeout(""+this.id+".count_down()",2000);
    
    
  	}
  // Almacenamos el objeto en una variable, es necesario para el método setTimeout
  eval("window."+obj.id+" = obj");
  // Llamamos a la función
  obj.count_down();

}

//-->
</script>

</head>
<body>
<div id="test" onclick="start_countdown(this,10)">10 Haz click para iniciar la cuenta atrás</div><br>
<div id="test2" >20 Haz click para iniciar la cuenta atrás</div><br>
<script language="JavaScript" type="text/javascript">
<!--
document.getElementById("test2").onclick = function(){
	start_countdown(this,20);
	
}

//-->
</script>


</body>

</html>
Para que sea el código más "legible" se podría poner la function count_down fuera de la función start_countdown.

Código:
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
function count_down(){
      // Evitamos que el usuario acelere la cuenta atrás
      this.onclick = "new Function(return false)";
      this.n--;
      this.innerHTML = this.n;
      // Si a terminado la cuenta atrás volvemos a permitir la cuenta atrás
      if(this.n == 0){ 
      	this.innerHTML = this.n + " Haz click para iniciar la cuenta atrás otra vez.";
      	this.onclick = function(){
                  this.n = this.const_n + 1;
                  this.count_down();
      		
      	}
      }
      if(this.n > 0) this.ctrl = window.setTimeout(""+this.id+".count_down()",2000);
    
    
  	}

// Enviamos el objeto y las variables 
 function start_countdown(obj,n){
  
  // añadimos propiedades al objeto para almacenar las variables
  obj.const_n = n;
  obj.n = n + 1;
  obj.ctrl;
  // Asignamos la función al objeto
  obj.count_down = count_down
  // Almacenamos el objeto en una variable, es necesario para el método setTimeout
  eval("window."+obj.id+" = obj");
  // Llamamos a la función
  obj.count_down();

}

//-->
</script>

</head>
<body>
<div id="test" onclick="start_countdown(this,10)">10 Haz click para iniciar la cuenta atrás</div><br>
<div id="test2" >20 Haz click para iniciar la cuenta atrás</div><br>
<script language="JavaScript" type="text/javascript">
<!--
document.getElementById("test2").onclick = function(){
	start_countdown(this,20);
	
}

//-->
</script>


</body>

</html>
Lo de "legible" es cuestión de gustos.
Bueno, espero haber acertado.

Saludos