Autor | Zpráva | ||
---|---|---|---|
Phoenix Profil |
#1 · Zasláno: 15. 7. 2011, 20:22:37 · Upravil/a: Phoenix
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 |
#2 · Zasláno: 15. 7. 2011, 20:52:02
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 |
#3 · Zasláno: 16. 7. 2011, 13:09:01 · Upravil/a: Witiko
Phoenix:
Je to ekvivalentní k volání: setTimeout(new Function("realOpen(data, title, color, tabID)"), 1200); // hlásí "data is not defined" 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); |
||
Časová prodleva: 13 let
|
0