Aquí hay un enfoque que está más en sintonía con la forma en que se diseñó JS (como un lenguaje funcional para aquellos que aún no lo saben). En lugar de depender de una variable global, utilice un cierre:
$("#knap").click(function start()//named callback to bind && unbind:
{
$(this).unbind('click');//no need to start when started
$("#reset").unbind('click').click((function(timer)
{//timer is in scope thanks to closure
return function()
{//resets timer
clearInterval(timer);
timer = null;
$('#knap').click(start);//bind the start again
//alternatively, you could change the start button to a reset button on click and vice versa
}
})(setInterval((function(sec)
{
return function()
{
$('#timer').text(sec--);
if (sec === -1)
{
$('#reset').click();//stops interval
$('#reset').unbind('click');//no more need for the event
alert('done');
}//here's the interval counter: 15, passed as argument to closure
})(15),1000)));//set interval returns timer id, passed as argument to closure
});
Ahora tengo que admitir esto es bastante complicado (y no probado) pero de esta manera no restablece evento sólo está disponible cuando es necesario, y no se está usando cualquier globo terráqueo. Pero lo más importante, aquí es donde radica el poder de JS: funciona como objetos de 1ª clase, pasando como argumentos y valores de retorno ... sólo tiene que ir función loco :)
He creado un Fiddle de trabajo, también
-1 solución fea con var mundial ... – Christoph
voy a aceptar su respuesta. –
Excelente código. Gracias. – Kavin