Stránka 1 z 1

odpočet času (javasriptem) + odeslání formuláře...

Napsal: ned 17. úno 2013, 23:17
od Václav Sedlář
Ahoj, mám HTML formulář a pod ním tlačítko odeslat a potřeboval bych nějak javascriptem (nemusí to být javasriptem, jakkoliv co nejjednodušeji...jinak dělám stránky v php) udělat odpočet času a když čas dojde na 00:00 (mm:ss), tak aby se jakoby stisklo subbmit tlačítko - prostě aby se odeslal formulář...

Komplikaci je, že se jedná o test, takže na začátku testu se spustí odpočet a i když bude uživatel přepínat mezi otázkami, tak čas musí pořád běžet...takže asi budu muset do formuláře dát dvě skryté pole (input), kde bude uložen celkový čas (v sekundách) a již uplynulý čas (v sekundách)...a js bude muset do toho pole s uplynulým časem pořád zapisovat novou hodnotu...

Nevíte, jak to udělat? A ještě k tomu aby se čas někde ukazoval? Díky moc...

Edit: Ještě mě napadlo a asi by to bylo i lepší, že JS by jen zobrazil odpočet, nic víc, a php nebo něco jinýho (ajax,...) by na pozadí jen odeslal formulář...

Re: odpočet času (javasriptem) + odeslání formuláře...

Napsal: čtv 21. úno 2013, 19:43
od Václav Sedlář
Tak mám teoretický napád jak to udělat:
ty stránky co dělám, je vlastně takový test...několik otázek a tlačítko "předchozí otázka", "další otázka", tlačítko "ukončit a vyhodnotit"...

Na test třeba 20 minut a odpočet času se musí zobrazit (např. v pravém sloupci)...

A mám takovýto nápad jak to udělat:

Do formuláře s odpovědí dát dva skryté inputy kde budou hodnoty (v sekundách) celkový čas na test a počet uběhlých sekund...

Při spuštění testu se načte celkový čas a uběhlý čas se bude zapisovat pořád do příslušného pole.Při kliku na další otázku se odešle form. a načte další, kde bude předvyplněn celkový čas a uběhnutý čas. JS si oba údaje zase načte, odečte a zase spustí odpočet...

Pak ještě udělat něco jako if(čas==0){odeslat form tlačítkem "ukončit a vyhodnotit"}...

Ale nevím jak to udělat prakticky v tom JS - moc ho neumím...

Re: odpočet času (javasriptem) + odeslání formuláře...

Napsal: sob 23. úno 2013, 02:03
od Václav Sedlář
Tak jsem na netu našel nějaký časovač, trochu si ho přizpůsobil a funguje...zde je ten časovač: http://webtrh.cz/35598-odpocet-casu-javascriptu

vyřešeno, funguje...

Re: odpočet času (javasriptem) + odeslání formuláře...

Napsal: pon 25. úno 2013, 01:20
od Airywave
tohle na programování miluju, člověk si píše/mluví sám se sebou a nakonec na to přijde. Jsem rád že jsem začal studovat matematiku a algoritmy a poté se dostal přes programování k analytice. Tohle člověk nikde jinde nezažije :)

Re: odpočet času (javasriptem) + odeslání formuláře...

Napsal: pon 25. úno 2013, 14:46
od Václav Sedlář
jj...s JS mám dost problémy a nesnáším ho, takže jsem fakt nevěděl jak to udělat prakticky (teorie byla)...a při čekání na odpověď jsem hledal řešení no...a našel...

Re: odpočet času (javasriptem) + odeslání formuláře...

Napsal: pon 25. úno 2013, 17:02
od Broxik
toz ja mu neco hodil do pm ale napsal sem to obecne aby se trosku potrapil nechtel sem tu v zadnem pripade davat hotove reseni to nikomu jeste neprospelo;).....

Re: odpočet času (javasriptem) + odeslání formuláře...

Napsal: pon 25. úno 2013, 21:13
od Václav Sedlář
Hmm, fakt to je skvělé...kdybych to uměl, nebo měl čas se to naučit, tak sem nepíšu...od čeho je tady to forum... :evil: :x

Re: odpočet času (javasriptem) + odeslání formuláře...

Napsal: úte 26. úno 2013, 14:56
od 1Pupik1989
Takže rozdíl dvou časů a následný převod do stringu je asi jasný.

Dám sem svůj původní, který už nepoužívám, nicméně funguje a princip se z toho dá vyčíst

Kód: Vybrat vše

function Timer(time){
  this.time = time;
};
Timer.prototype = {
  start:function(){ //Spuštění funkce
    var that = this;
    this.step(this.time);
    
    this.timer = setInterval(function(){
      that.time -= that.subTime;
      that.step(that.time);
      if(that.time<=0){
        that.stop();
        that.complete();
      }
    },this.subTime);  
  },
  subTime:1000, //Čas po kterém se cyklus opakuje
  step:function(){ //Zde se dá nastavit, co se každý krok stane
  },
  complete:function(){ //Co se stane, až časovač dojde nakonec tedy k 0
  },
  stop:function(){ //zastavení časovače
    clearInterval(this.timer);
  },
  toString:function(){ //Převod milisekund na řetězec
    if(this.time<0){ return false; }
    var diff = this.time;
    var d = 24*60*60*1000, h = 60*60*1000, m = 60*1000;
  
    var days = diff/d ^ 0;  
    diff -= days*d;
  
    var hours = diff/h ^ 0;  
    diff -= hours*h;
  
    var minutes = diff/m ^ 0;  
    diff -= minutes*m;
  
    var seconds = diff/1000 ^ 0;
    diff -= seconds*1000;
  
    return days+" dní "+hours+":"+minutes+":"+
           seconds+"." +diff;
  }
};
Je to vlastně obyčejný konstruktor. Já to radši tak nějak v kupě přehledněji.