JS eval bug FF-ban
Sziasztok!
az alábbi szkript miért nem működik FF-ban?
consol: val1 is not definedez 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!
■ az alábbi szkript miért nem működik FF-ban?
consol: val1 is not defined
- <html>
- <head>
- <script language="javascript">
- var melyik;
- melyik=0;
- function valaszt(th) {
- var s,i;
- if (melyik>0)
- eval("val"+melyik).src="ch0.gif";
- nev=th.name;
- melyik=nev.substring(3,5);
- eval(th).src="ch1.gif";
- }
- </script>
- </head>
- <body>
- <img name="val1" src="ch0.gif" onclick="valaszt(this)">első<br>
- <img name="val2" src="ch0.gif" onclick="valaszt(this)">második<br>
- <img name="val3" src="ch0.gif" onclick="valaszt(this)">harmadik<br>
- <img name="val4" src="ch0.gif" onclick="valaszt(this)">negyedik<br>
- <img name="val5" src="ch0.gif" onclick="valaszt(this)">ötödik<br>
- <br><br>
- <a href="javascript:alert(melyik);">Szavazok</a>
- </body>
- </html>
előre is köszönöm!
eval
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.