Autor Zpráva
Watchick
Profil *
Dobrý den, chtěl bych se zeptat, zda-li má mít někde nějakoiu blokaci, když mám php kód který tvoří JS:
<?php
$cislo = 1;
while ($cislo <= 5) {
?>
<script type="text/javascript">
      <!--
<?php
if ($cislo == "1") $jsvar = $secakce1;
if ($cislo == "2") $jsvar = $secakce2;
if ($cislo == "3") $jsvar = $secakce3;
if ($cislo == "4") $jsvar = $secakce4;
if ($cislo == "5") $jsvar = $secakce5;
?>
      var cil = <?php echo $jsvar; ?>;
      var hlaska = "Čas už uplynul";
      function prvek(jmeno) {
        var obj=0;
        
        // getElementByID - ne-IE prohlizece a nove verze IE
        if(document.getElementById){
          obj = document.getElementById(jmeno);
        }
        // document.all - stare verze IE
        else if (document.all){
          obj = document.all[jmeno];
        }
        return obj;
      }
      var el = prvek("odpocet<?php echo $cislo; ?>");

      function odpocet<?php echo $cislo; ?>(){
        var dt = new Date();
        var ted = dt.getTime() / 1000;
        var diff = cil - ted;
        if(diff <= 0){
          el.innerHTML = hlaska;
          return(0);
        }
        var tmp = diff;
        var d = Math.floor(tmp / 86400);
        tmp = tmp % 86400;
        var h = Math.floor(tmp / 3600);
        tmp = tmp % 3600;
        var m = Math.floor(tmp / 60);
        tmp = tmp % 60;
        var s = Math.floor(tmp);
        casStr = "";
        if(d > 4) casStr = casStr + d + " dní, ";
        else if(d > 1) casStr = casStr + d + " dny, ";
        else if(d > 0) casStr = casStr + d + " den, ";
        if(h < 10) casStr += "0";
        casStr = casStr + h + ":";
        if(m < 10) casStr += "0";
        casStr = casStr + m + ":";
        if(s < 10) casStr += "0";
        casStr = casStr + "" + s;  
        el.innerHTML = casStr;
        setTimeout("odpocet<?php echo $cislo; ?>()",995); 
      }
      
      if(el){
        setTimeout("odpocet<?php echo $cislo; ?>()",1000);
      }
    
      -->
    </script>
<?php
    $cislo++;
}
?>

vysledkem cehoz je 5× vypsaný JS kód, ale pokaždý s jiným "var cil = <?php echo $jsvar; ?>;" protože vždy se tam doplňí jiné číslo, mělo by to také po vypsání těchto divů vypsat všech 5 odpočítávání, ne? zatím mi to teda ukazuje pouze jedno...
ty divy mám tvořené pomocé php:
$sisis = "1";
while (list($id1, $nazevakce1, $x1, $y1, $todivnycislo, $kodaliance1, $secakceall) = mysql_fetch_array($navrat)){
if($sisis == "1")$secakce1 = $secakceall;
if($sisis == "2")$secakce2 = $secakceall;
if($sisis == "3")$secakce3 = $secakceall;
if($sisis == "4")$secakce4 = $secakceall;
if($sisis == "5")$secakce5 = $secakceall;
echo "<b>$nazevakce1</b>:<br /> Jednotky poslat za:<div id=\"odpocet$sisis\"></div><br />";
$sisis++;
}

Potřeboval bych poradit, co , nebo jak změnit, aby se odpočítávalo všech těch 5 odpočítávadel, předem děkuji za pomoc
peta
Profil
Watchick
V prvni rade, jsme v JS foru. PHP kod je tu neresitelna zalezitost, to vygeneruje nejaky server uz predtim.
"ty divy mám tvořené pomocé php: "
To je ono. JS pracuje az na HTML kodu. PHP kod je pro JS neviditelny, kdesi na serveru. Na server se JS nedostane.

Za druhe, kdyz neco opakujes s jinym parametrem, bylo by fajn z toho udelat funkci s parametrem. Pak to zavolas jako funkci a nemusis to 10x vypisovat. To myslim tak delas i v PHP, ne?
Viz
function prvek(jmeno) {
tady to s parametrem mas.
...
Pak nechapu, proc mas:
var el = prvek("odpocet<?php echo $cislo; ?>");
function odpocet<?php echo $cislo; ?>(){
...
el.innerHTML = hlaska;
Proc el nepredavas jako parametr, ale definujes to jako globalni promennou?
A kdyz uz to davas jako glovalni promennou, proc to nedas do pole a nepredavas parametr cislo=0..10 te funkci.
Jinymi slovy, dela se to trosku jinak. JS pekne vypises cele v HEAD a pak se jen odkazujes na prisluusne funkce. Placat to do HTML kodu ti jen komplikuje zivot a prehlednost pri hledani chyb.

Za nulte, odkaz na stranku. S pulkou kodu se neda pracovat. Chyba je treba nekde jinde.
Klikneme, zobrazi se zmineny HTML kod a vidime, co tam mas za binec. Pripadne ti rekneme radek chyby v tom kodu.


jinymi slovy:
<head>
<script>
// ----------------- glob prom -----------------
var timer = [];

// ----------------- funkce -----------------
function objekt() {...}
function odpocet()
{el = objekt('odpocet+'i); ...}
function init(max)
{
for (...<max...)
{timer[i] = cas('odpocet('+i+')',1000);}
}
</script>
</head>
<body onload="init(<?php echo $pocet; ?>)">
... DIVY ...
</body>
Co se tyce PHP kodu, pouzil jsem 1 jedine echo a stranka se ti vygeneruje 10x rychleji. A neopakuji JS kod.
Navic mam kazdy casovat c promenne a kdyz bych chtel stopnout, tak staci presunout do null
i=3; timer[i] = null;
Watchick
Profil *
co se tyce odkazu na tu stranku, tak ta je jenom pod registraci, takze jsem z toho vyextrahoval to potrebne... odkaz je Tady
ohledne JS je mi úplne jasne, ze takhle se to bude generovat pomaleji, ale s mými (žádnými) zkušenostmi JS jsem rád že mam alespoň toto... A děkuji, že jsi napsal tak vyčerpávající příspěvek, ale s mými znalostmi tomu rozumím jen minimálně...
Watchick
Profil *
Dobře takže jinak: stále nechápu jak mohu docílit aby mi jedeen tenhle script vygeneroval 5 časů, pokud ho nebudu kopírovat... můžete i to prosím ještě trochu upřenit? Díky
peta
Profil
Watchick
jak bys to udelal v php, abys řx neopakoval tutey funkci_ presne tak se to dela v js. napis, jak bys to udelal v php.

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