Autor Zpráva
Skg
Profil *
Dobré víkendové dopoledne,

mám jednoduchou javascriptovou funkci v PHP skriptu, která po stisknutí submitu formuláře načte z PHP časový limit v sekundách a pomocí setInterval odečítá načtenou hodnotu po sekundách k nule. Po vypršení limitu automaticky formulář odešle.

Problém je, že u mobilu, který se při probíhajícím odpočtu uvede do úsporného režimu (a nejspíš i u PC), se odpočet zastaví. Po probuzení zařízení pak odpočet plynule naváže, ačkoliv už limit ve skutečnosti vypršel a já bych potřeboval, aby skript formulář ihned odeslal.

Napadlo mě v určitém intervalu kontrolovat počet vteřin, které uplynuly od spuštění testu a při diferenci s odpočtem provést korekci, ale určitě existuje i elegantnější řešení. Byl bych rád, kdyby limit nezávisel na systémovém čase zařízení...

Javascript používám doplňkově a moc systematických poznatků z něj nemám, takže než se pustím do zbytečně překombinovaného řešení, zkusil bych zde požádat o radu. Děkuji.


<script type=\"text/javascript\">
var limit = $testLimitValue;
    setInterval(function() {
        if (limit < 1) {
        document.test$cH.submit();
        }
    limit = limit-1;
    }, 1000);
</script>
Serg
Profil
Já bych se klidně spolehnul na systémový čas.
Kdyby někdo chtěl obejít čekací dobu, a nebude to ošetřené na straně serveru, tak ji obejde. Např. otevřením konzole a změnou hodnoty proměnné limit, nebo změnou systémového času, to vyjde skoro nastejno.

var limit = 10; // to predpokladam bude vlozene z php
var wait_until = new Date();
wait_until.setSeconds(wait_until.getSeconds() + limit);

var interval1 = setInterval(function() {
  var now = new Date();
  if (wait_until < now) {
    document.test$cH.submit();
    clearInterval(interval1);
  }
  // dalsi veci, jako zobrazeni odpoctu... jinak by stacil setTimeout
}, 1000);
Skg
Profil *
Děkuji, ano, nakonec jsem to na podobném principu vykombinoval, ale ne tak úsporně a úhledně. Díky.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0