Autor Zpráva
Phoenix
Profil
JS ma vždycky sr... hneval. A už je to tu zas:
function processOpen(data, title, color, tabID, change){
  if(change==1){
    closeTab(0);
    alert(data); / alert vyhodí obsah premennej data
    setTimeout("realOpen(data, title, color, tabID)", 1200); / hlási "data is not defined"
  }else{
    realOpen(data, title, color, tabID);
  }
}

Opis priamo na riadkoch kódu - nechápem prečo toto robí.
Keď odstránim Timeout a len hneď zavolám funkciu - funguje to.
Keď odstránim úvodzovky v ktorých je funkcia "realOpen" v Timeoute, tak isto to funguje, avšak spustí sa hneď.
Ja tam ten časový odstup potrebujem.
Vopred ďakujem za odpovede.
_es
Profil
Phoenix:
Toto vyrieši tvoj problém.

JS ma vždycky sr... hneval.
JS nemôže za množstvo tvojich vedomostí o JS.
Witiko
Profil
Phoenix:
Je to ekvivalentní k volání:
setTimeout(new Function("realOpen(data, title, color, tabID)"), 1200); // hlásí "data is not defined"
Vytváření nové funkce zadáním textové literály k definici těla má jednu velkou nevýhodu - na rozdíl od eval nerespektuje kontext pod nímž je funkce tvořena a je proto vytvořena pod globálním objektem - window. To znamená, že nemá přístup k argumentům data, title, color, tabID, change.

Když už jsem zmínil eval, tak jenom pro zajímavost podotknu, že následující by fungovalo, protože eval respektuje konext v němž je spuštěn:
setTimeout(function() {
  eval("realOpen(data, title, color, tabID)");
}, 1200);

Tím samozřejmě nevyzývám k jeho použití, jak správně podotknul _es, je zde mnohem čistší způsob, jak vše vyřešit - anonymní funkce:
setTimeout(function() {realOpen(data, title, color, tabID);}, 1200);

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