Andreas Kitzing: Runtime Error im Internet Explorer

Hallo,
ich bekomme beim Aufrufen einer JS-Funktion im Internet Explorer immer einen Runtime Error (Objekt erwartet).
Die Datei wird in einem iFrame geladen und soll bestimmte Div-Boxen im Parent Frame ausblenden.
Die IDs der Div-Boxen sind aufgebaut: 'fotobox13', 'fotobox15', 'fotobox1337', usw... Die jeweilige Zahl bekommt das Array Vanish über PHP übergeben, der PHP-String $v_str sieht dann z.B. so aus: $v_str = "'13','15','1337'", wenn diese drei Boxen ausgeblendet werden sollen.
Das ganze funktioniert in FF und im IE7 auch wunderbar, nur meldet mir der Internet Explorer zusätzlich einen Laufzeit-Fehler.

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript">
Vanish = new Array(<?php echo $v_str; ?>);
function hideSth() {
 alert('Deine Änderungen wurden erfolgreich übernommen');
 for (var i = 0; i < Vanish.length; $i++) {
  VanishId = 'fotobox' + Vanish[i];
  parent.document.getElementById(VanishId).style.display = "none";
 }
}
</script>
</head>
<body onLoad="hideSth()">

</body>
</html>

Ist bestimmt nur ein kleiner Fehler, aber ich finde ihn irgendwie nicht. :/
Wäre toll, wenn mir jemand helfen könnte!

Gruß,
Andreas

  1. <html>

    Ohne DOCTYPE? Du solltest den Quriksmode vermeiden!

    <script type="text/javascript">
    Vanish = new Array(<?php echo $v_str; ?>);

    PHP Code ist für ein JS Problem unrelevant, zeig uns den Code der im Browser ankommt.

    Struppi.

    1. Ohne DOCTYPE? Du solltest den Quriksmode vermeiden!

      Das Script-Problem ist ja jetzt gelöst. :)

      Was die Doctype-Angabe angeht: Ist das auch bei nicht sichtbaren Frames notwendig? Die Datei besteht für den Client ja nur aus der obigen JS-Funktion, die das Aussehen im Parent-Frame (Doctype Transitional) manipuliert. Ob der versteckte Frame dann im Quirksmode stattfindet, kann doch egal sein, oder?

      1. Was die Doctype-Angabe angeht: Ist das auch bei nicht sichtbaren Frames notwendig? Die Datei besteht für den Client ja nur aus der obigen JS-Funktion, die das Aussehen im Parent-Frame (Doctype Transitional) manipuliert. Ob der versteckte Frame dann im Quirksmode stattfindet, kann doch egal sein, oder?

        So gesehen ja, aber das Skript kann natürlich auch u.U. falsch reagieren, falls noch mehr Code ausgeführt werden soll. Du sparst letztlich nur ca. 100 Byte wenn du ihn wegläßt.

        Struppi.

  2. hallo,

    ich bekomme beim Aufrufen einer JS-Funktion im Internet Explorer immer einen Runtime Error (Objekt erwartet).
    [...]
    Vanish = new Array(<?php echo $v_str; ?>);

    Damit übergibst du einen PHP-Schnipsel - der nur bei Ausführung auf dem Server korrekt "verstanden" werden kann - an eine auf dem Client gültige Javascript-Variable. Die Folge: es existiert kein "Objekt".

    Das ganze funktioniert in FF und im IE7 auch wunderbar

    Firefox verfügt über eine Fehlerkonsole. Was meldet dir die?

    Daß es "funktioniert", leigt daran, daß du mit

    for (var i = 0; i < Vanish.length; $i++) {
      VanishId = 'fotobox' + Vanish[i];
      parent.document.getElementById(VanishId).style.display = "none";
    }

    das Element sowieso ausblendest. Es macht nichts, daß der Übergabeparameter, den Javascript produzieren soll, vermutlich anders aussieht als du ihn haben möchtest, er ist jedenfalls vorhanden, also wird das Element wunschgemäß ausgeblendet.

    Zonk

    1. Damit übergibst du einen PHP-Schnipsel - der nur bei Ausführung auf dem Server korrekt "verstanden" werden kann - an eine auf dem Client gültige Javascript-Variable. Die Folge: es existiert kein "Objekt".

      Das ganze wird auch auf dem Server ausgeführt, der PHP-Schnipsel ist korrekt, das Objekt existiert (auch beim Client). Der Übergabeparameter würde sonst auch nicht vorhanden sein.

      Dein Tipp mit der Fehlerkonsole von Firefox war aber super. Diese meldet nämlich, dass $i nicht definiert ist - ist es ja auch nicht, ich habe schließlich in der for-Anweisung i definiert und nicht $i. Da ist mir wohl ein $-Zeichen davorgerutscht, Macht der Gewohnheit (böses PHP).

      Hab das ganze entfernt und jetzt funktioniert es fehlerfrei. :)

      Danke! :)