ugrás a tartalomhoz

JS eval bug FF-ban

DarkRaptor · 2008. Júl. 21. (H), 14.52
Sziasztok!

az alábbi szkript miért nem működik FF-ban?

consol: val1 is not defined
  1. <html>  
  2. <head>  
  3. <script language="javascript">  
  4.   
  5. var melyik;  
  6. melyik=0;  
  7.   
  8. function valaszt(th) {  
  9. var s,i;  
  10.   
  11. if (melyik>0)  
  12. eval("val"+melyik).src="ch0.gif";  
  13. nev=th.name;  
  14. melyik=nev.substring(3,5);  
  15. eval(th).src="ch1.gif";  
  16. }  
  17.   
  18. </script>  
  19. </head>  
  20. <body>  
  21.   
  22. <img name="val1" src="ch0.gif" onclick="valaszt(this)">első<br>  
  23. <img name="val2" src="ch0.gif" onclick="valaszt(this)">második<br>  
  24. <img name="val3" src="ch0.gif" onclick="valaszt(this)">harmadik<br>  
  25. <img name="val4" src="ch0.gif" onclick="valaszt(this)">negyedik<br>  
  26. <img name="val5" src="ch0.gif" onclick="valaszt(this)">ötödik<br>  
  27. <br><br>  
  28.   
  29. <a href="javascript:alert(melyik);">Szavazok</a>  
  30.   
  31. </body>  
  32. </html>  
ez IE-ben szépen működik, kattintásra lecseréli a ch0.gif-et ch1.gif-re. FF-ban első kattintás után behal a szkript.

előre is köszönöm!
 
1

eval

vbence · 2008. Júl. 21. (H), 15.11
Az eval áltaslánosan kerülendő, főleg ebben az esetben: Haszánj id-t az objektumok azonosítására, és getElementByID-vel kérdezd le az id-hez tartozó DOM objektumot!

Amúgy a konkrét hiba a 15-ös sorban van: az egy dolog, hogy egy name-et eval-ozol, itt viszont magát az objektumot (pontosabban a toString függvénye eredményét) futtatod át az eval-on. A 15-ös sor akkor lenne egyenértékű a12-essel, ha eval(th.name) lenne, de minek eval oda, ha a th már eleve tartalmazza az objektumot. Tehát th.src -re símán hivatkozhatnál abban a sorban. - De ez mind csak zárójelben. Tessék a DOM megfelelő technikáit hazsnálni!

Mellesleg a melyik változóba tárolhatnád magát a th objektumot is (ha egyszer már megkaptad), így nem kéne bohóckodni substringekkel, meg eggyel kevesebb névfeloldás kéne bele.