Oliver: Versteht einer diesen Fehler im NN4

Hi,

also, folgende Funktion:
for(i=1;i<=(topics.length-1);i++){
  createLay(topics[i]);
  //alert(topics[i]);
}
gibt folgende Fehlermeldung im NN4 zurück:
  i is not defined.

Wenn man anstatt des Funktionsaufrufes den Alert aktiviert, dann zeigt er alles einwandfrei an. auch der Umweg:
  tmpVar = topics[i];
  createLay(tmpVar);
bringt absolut nix. Die Funtion createLay() geht so los:
function createLay(tmpString){
 $tmp = tmpString.split("|");
 ...
}
dann kommen noch reichlich String-Operationen und document.write, aber nix ungewönliches.
Der Array drüber ist auch ok.

Ich versteh' einfach nicht, warum i 'not defined' sein soll, einfacher gehts doch nun wirklich nicht.

Vielleicht kann mir ja einer helfen...
Vielen Dank schonmal
:o) Oli

  1. Hi,

    gibt folgende Fehlermeldung im NN4 zurück:
      i is not defined.

    hm, der gesamte Funktions-Aufbau könnte interessant sein.

    $tmp = tmpString.split("|");

    Da fällt mir doch gleich am Anfang der Zeile etwas auf... ;-)

    Hast Du dazu 'ne URL?

    Cheatah

    1. wenn du magst .) hier ist das ganze:
      // ****************************************************************************
      // x42 menu-generator
      // 07/2001 by Oliver, oliver@webwichtel.de
      // ****************************************************************************
      // 9 topics main-menu
      // each main-topic can have upt to 9 sub-topics
      // the topic-numer 0 (null) is needed for technical reasons
      // ****************************************************************************

      // variables
      var id = "";    // layername
      var xPos = 0;    // pos from left
      var yPos = 0;    // pos from top
      var textColor = "";   // text-color
      var textSize = "";   // text-size
      var bgColor = "";   // bgcolor
      var hoverBgColor = "";  // bgcolor onMouseOver
      var view = "";    // initial visibility mode
      var leftBorder = 0;   // border-setting for IE
      var rightBorder = 0;  // border-setting for IE
      var topBorder = 0;   // border-setting for IE
      var bottomBorder = 0;  // border-setting for IE
      var borderStyle = "";  // border-style for IE
      var layWidth = 0;   // width of topic displayed
      var layHeight = 0;   // height of topic displayed
      var bgImage = "";   // optional background image for IE
      var content = "";   // content of topic
      // array for menu-topics
      var topics = new Array();
      // parameters are devided by "|"
      // don't start with [0], start with [1], like the example
      // you may use HTML using single exclamation marks like /'/ instead of /"/
      // topics[number] = ("id|xPos|yPos|textColor|textSize|bgColor|hoverBgColor|view|leftBorder|rightBorder|topBorder|bottomBorder|layWidth|layHeight|bgImage|content");
      topics[1] = ("lay1|100|100|#ffffff|12|#000000|#0000ff|visible|1|1|1|1|solid|150|16|0|<a href='#'>menupunkt 1</a>");
      topics[2] = ("lay2|100|120|#ffffff|12|#000000|#0000ff|visible|1|1|1|1|solid|150|16|0|menupunkt 1");
      topics[3] = ("lay3|100|140|#ffffff|12|#000000|#0000ff|visible|1|1|1|1|solid|150|16|0|menupunkt 1");

      // this function controls menu-generation
      function makeMenu(){
       for(i=1;i<=(topics.length-1);i++){
        createLay(topics[i]);
        //alert(topics[i]);
       }
      }

      // create menu-layers --> bg-image does not work
      function createLay(tmpString){
       $tmp = tmpString.split("|");
       for(k=0;k<=$tmp.length;k++){
        id = $tmp[0];
        xPos = parseInt($tmp[1])+"px";
        yPos = parseInt($tmp[2])+"px";
        textColor = $tmp[3];
        textSize = parseInt($tmp[4])+"px";
        bgColor = $tmp[5];
        hoverBgColor = $tmp[6];
        view = $tmp[7];
        leftBorder = parseInt($tmp[8])+"px";
        rightBorder = parseInt($tmp[9])+"px";
        topBorder = parseInt($tmp[10])+"px";
        bottomBorder = parseInt($tmp[11])+"px";
        borderStyle = $tmp[12];
        layWidth = parseInt($tmp[13])
        layHeight = parseInt($tmp[14])
        bgImage = $tmp[15];
        content = $tmp[16];
       }
       if(isNN){
        $lay ="immer nur langsam";
       }
       if((isIE)||(isGecko)){
        $lay ="<div id='"+id+"' style='position:absolute;left:"+xPos+";top:"+yPos+";color:"+textColor+";font-size:"+textSize+";background:"+bgColor+";visibility:"+view+";border-left:"+leftBorder+" "+borderStyle+";border-right:"+rightBorder+" "+borderStyle+";border-top:"+topBorder+" "+borderStyle+";border-bottom:"+bottomBorder+" "+borderStyle+";width:"+layWidth+";height:"+layHeight+"'>";
        $lay += content;
        $lay += "</div>\n";
       }
       document.write($lay);
      }

      :o) Oli

      was ist Dir eigentlich aufgefallen? Das der Itentifier mit $ losgeht?

      1. Hallo Oli,

        also, ganz so genau hab ich das Skript nicht gelesen, hab aber mal einen Verdacht:
        Function createLay(tmpString) kommt erst nach function makeMenu und wird von makeMenu aus aufgerufen.
        Manche Sprachen mögen das einfach nicht. Wie das bei JS ist, weiß ich nicht, aber tausch die Reihenfolge mal, vielleicht hilft es.

        Gruß Vedat

  2. Hallo Oliver!

    dann kommen noch reichlich String-Operationen und document.write,

    ^^^^^^^^^^^^^^

    und das wird vielleicht per onLoad aufgerufen? Dann hättest du dir ein 1a selbstdestruktives Script gebastelt.
    Der Netscape scheint nicht nur den HTML-Kontext sondern auch den Javascript-Kontext einer Seite zu löschen sobald in diese per document.write nach fertigladen reingschrieben wird.

    Übliche Abhilfe: erst alles was ge-document.write-d werden soll in einer  Variablen sammeln und dann auf einen Schlag ausgeben.

    Gruss,
     Carsten