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

<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>
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.