Salut
In primul rand este eroare de logica. Daca minutele si secundele sunt setate in interiorul functiei, cu datele din formular, la fiecare apelare a functiei, degeaba se fac calcule pt definire /scadere secunde, ca iar sunt setate la valoarea din formular.
Ar trebui aceste variabile create in afara functiei, iar valoare pt ele din formular sa fie preluata doar cand e butonul apasat.
Sunt mai multe lucruri care trebuie avute in vedere, cum ar fi scaderea minutelor cand secundele ajung la 0, si alte verificari ca sa fie evitate erorile.
Pentru invatare, poti testa si studia sciptul urmator (explicatii sunt in comentariile din cod).
Cod: Selectaţi tot
<form>
Minute: <input type="text" id="mns" name="mns" value="0" size="3" maxlength="3" /> Secunde: <input type="text" id="scs" name="scs" value="0" size="2" maxlength="2" /><br/>
<input type="button" id="btnct" value="START" onclick="countdownTimer()"/>
</form>
Numaratoare inversa: <span id="showmns">00</span>:<span id="showscs">00</span>
<script type="text/javascript"><!--
/* Functie pt afisare numaratoare inversa cu timpul de inceput preluat din formular */
// seteaza variabile pt minute si secunde
var ctmnts = 0;
var ctsecs = 0;
var startchr = 0; // folosit ca sa controleze cand sa citeasca valorile din formular
function countdownTimer() {
// https://marplo.net/ - http://www.coursesweb.net/javascript/
// daca $startchr e 0, si campurile de formular exista, preia datele pt minute si secunde, seteaza $startchr la 1
if(startchr == 0 && document.getElementById('mns') && document.getElementById('scs')) {
// se asigura ca scriptul foloseste doar numere intregi
ctmnts = parseInt(document.getElementById('mns').value) + 0;
ctsecs = parseInt(document.getElementById('scs').value) * 1;
// daca valoarea nu e un numar, o seteaza 0
if(isNaN(ctmnts)) ctmnts = 0;
if(isNaN(ctmnts)) ctmnts = 0;
// rescrie minutele si secundele in formular, pt a fi sigur ca contine numere intregi
document.getElementById('mns').value = ctmnts;
document.getElementById('scs').value = ctsecs;
startchr = 1;
document.getElementById('btnct').setAttribute('disabled', 'disabled'); // dezactiveaza butonul
}
// daca minute si secunde sunt 0, seteaza $startchr 0, returneaza false
if(ctmnts==0 && ctsecs==0) {
startchr = 0;
document.getElementById('btnct').removeAttribute('disabled'); // elimina "disabled" ca sa activeze butonul
/* AICI PUTETI ADAUGA SA FIE EXECUTATA O FUNCTIE JavaScript CAND CRONOMETRU AJUNGE LA 0 */
return false;
}
else {
// scade secundele, si minutele daca secundele ajung la 0
ctsecs--;
if(ctsecs < 0) {
if(ctmnts > 0) {
ctsecs = 59;
ctmnts--;
}
else {
ctsecs = 0;
ctmnts = 0;
}
}
}
// afiseaza timpul in pagina, si auto-apeleaza aceasta functie dupa 1 secunda
document.getElementById('showmns').innerHTML = ctmnts;
document.getElementById('showscs').innerHTML = ctsecs;
setTimeout('countdownTimer()', 1000);
}
//-->
</script>