| Autor | Zpráva | ||
|---|---|---|---|
| Skg Profil * |
#1 · Zasláno: 25. 4. 2020, 10:39:23
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 |
#2 · Zasláno: 25. 4. 2020, 14:47:08
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 * |
#3 · Zasláno: 25. 4. 2020, 15:42:26
Děkuji, ano, nakonec jsem to na podobném principu vykombinoval, ale ne tak úsporně a úhledně. Díky.
|
||
|
Časová prodleva: 6 let
|
|||
0