lotte: XHTML Dynamisch generierte Javascripte

Ich hab Probleme mit dynamisch generierten Javascripten und XHTML. Obwohl das dynamisch erzeugte Menu nicht im Quelltext erscheint und als js ausgelagert ist zeigt der Mozilla mir das Menu nicht richtig an. Imdynamischen Teil hab ich dann schon nicht ganz xhtml conform stylangaben in Tags, was aber nicht anders geht denk ich , da die auch wieder dynamisch sind??
Gibt es dazu irgentwelche tollen nachschlagewerke wo was dazusteht??

Hier mal der Quelltext, wer Lust hat:

Grüße
Lotte

Inhalte stehen in einem Array auf der Html Seite:

js.Datei:

var height = 20; // height of the menu headers
  var iheight = 0; // height of the menu_items

var bgc = "lightyellow" // background color of the item
  var tc = "black" // text color of the item

var over_bgc = "silver";
  var over_tc = "red";

var speed =1;
  var timerID = "";
  var N = (document.all) ? 0 : 1; //if (document.all){N=0}else{N=1}
  var width = 902

var self_menu = new Array();
function write_menu()
{
  smc = 0; // count the position of the self_menu
  document.write("<div id='gesdiv'>");//alles umschließendes Div
  mn = 0;//Topposition
  mni = 1;//
  start = -1;

for(i=0;i<Link.length;i++)//Array mit Einträgen
  {
   la = Link[i].split("|");

if (la[0] == "0")//Obermenupunkt
   {
    if(start == 0){//kein weiterer Punkt mehr, dann div schließen
      document.write("</div>");
      h = iheight; //Höhe Menu insgesamt
      tmn = mn; //-h
      self_menu[smc] = new Array(tmn,h,0,-2);//jeder Eintrag wieder in Array
      smc++;
      mn--;
    }
    iheight = 0;
  //  csmc = 0;
    document.write("<div class='menu' style='top:"+mn+"px ;height:"+height+"px' id='down"+smc+"' onclick='pull_down("+smc+","+mni+")'> "+ la[1] + "</div>");
    self_menu[smc] = new Array(mn,height,0,mni);//neues Array mit 4 Einträgen?
    smc++;
    mni++;
    mn+=height;
    start = 1;
   }
   else//Untermenupunkt
   {
    if(start == 1)
     {
      //if(N)mn+=2;
    idname = "down"+smc;
    topwert = mn+'px';
    //alert (topwert);
    //document.getElementById(idname).style.top = topwert;

document.write("<div class='item_panel' id='down"+smc+"' style='top:"+mn+"px'>");
       start = 0;
     }

/* document.write("<a href='"+la[2]+"'");
          if (la[3] != "") document.write("target='" + la[3] + "'");*/

document.write("<div id='d"+i+"'>");

// if (N) document.write(";width:150");

ta = la[1].split("&");
    document.write("<table id='tab"+i+"' border='0' class='item'><tr><td class='spalte1'>");
    document.write( ta[0] + "</td><td class='spalte2'>"+ ta[1]+"</td><td class='spalte3'>"+ta[2]+"</td><td class='spalte4'>"+ ta[3]+"</td></tr></table></div>");
    var tabname = "tab"+i;
    iheight +=document.getElementById(tabname).offsetHeight;
   // csmc++;
   }//Ende else

}//Ende For

if (start == 0){//Untermenupunkt schliessen(endet mit Untermenupunkt)
     document.write("</div>");
     h = iheight;
     tmn = mn + 5; //-h
     self_menu[smc] = new Array(tmn,h,0);
     name = "down" + (self_menu.length-1);
     obj = document.getElementById(name);
     obj.style.borderBottomColor = "black";
     obj.style.borderBottomWidth = 1;
     obj.style.borderBottomStyle = "solid";
   }

document.write("</div>");
}

function color(obj)
{
 document.getElementById(obj).style.backgroundColor = over_bgc;
 document.getElementById(obj).style.color = over_tc
}

function uncolor(obj)
{
 document.getElementById(obj).style.backgroundColor = bgc;
 document.getElementById(obj).style.color = tc
}

function pull_down(nr,c)
{
var val=0;

if (timerID == "")
 {
 to = self_menu[nr+1][1]
 begin = nr + 2;
 if (timerID != "") clearTimeout(timerID);
 if (self_menu[nr+1][2] == 0)
 {
  self_menu[nr+1][2] = 1;
  if(nr == self_menu.length-2) {to++;}
  epull_down(begin,to,0);

}
 else
 {
  to = 0;
  self_menu[nr+1][2] = 0;
  name = "down"+(nr+2);
  open_item = 0;
  for(i=0;i<nr;i++)
  {
   if(self_menu[i][2] == 1)
    {open_item += self_menu[i][1];
    }
  }
  //if (N == false) {open_item-= (c*1)};
  if (nr== self_menu.length-2) {val = self_menu[self_menu.length-1][1];to=-1;}
  else  val = parseInt(document.getElementById(name).style.top) -(open_item)-(c*height);
  epull_up(begin,to,val);
 }
 }
 //name = "down"+(nr+1);
 //document.getElementById(name).style.clip = "rect(0,"+width+",100,0)";
}

function epull_down(nr,to,nowv)
{
 name = "down" + (nr-1);
 obj = document.getElementById(name).style.clip = "rect(0,"+width+","+(nowv+1)+",0)";
  //obj = document.getElementById(name).style.clip = "rect(0,"+width+","+iheight+",0)";
 for (i=nr;i<self_menu.length;i++)
 {
  name = "down" + i;
  obj = document.getElementById(name);
  parseInt(obj.style.top)+1;
 }
 nowv+=1;

if(nowv < to){
   timerID = setTimeout("epull_down("+nr+","+to+","+nowv+")",speed);
 }
 else{
   timerID = "";
 }

}

  1. Hi,

    naja, einiges kann man schon noch verbessern :-) Auf den alölerersten Blick fiel mir auf:
    document.write("<div id='gesdiv'>");
    was folgendes ergibt: <div id='gesdiv'>, und das ist natürlich Käse, da gehören Anführungszeichen hin, keine Hochkommata. Also nimm statt dessen:
    document.write('<div id="gesdiv">');
    (und an allen Parallelstellen auch), dann sind's schon wieder einige Fehlerchen weniger.

    Grüße,

    Utz

    1. naja, einiges kann man schon noch verbessern :-) Auf den alölerersten Blick fiel mir auf:
      document.write("<div id='gesdiv'>");
      was folgendes ergibt: <div id='gesdiv'>, und das ist natürlich Käse, da gehören Anführungszeichen hin, keine Hochkommata. Also nimm statt dessen:
      document.write('<div id="gesdiv">');

      Fast:
      Das passt nehmlich schon so,
      dass man da hochkomma reinsetzt,
      die werden dann nehmlich in anfuehrungszeichen umverwandelt.
      Weil wenns heissen wuerde "<bla id="blabla">" waere ja alles schon by id zu ente.
      Viel spass nochbeim javascriptlernen

      1. Hach, ist das drollig wenn so'n Besserwisser die Sache so richtig in den Sand setzt :-)

        Lieber Besserwisser, in den folgenden zwei Code-Schnippseln gilt es, zwei kleine, aber bedeutsame Unterschiede zu finden:

        document.write('<div id="gesdiv">');

        document.write("<div id="gesdiv">");

        Na, wo sind sie? Welche dieser Codezeilen wird funktionieren, welche nicht? Und: welche dieser Codezeile stammt von Dir, welche von mir? Na?

        Grüße,

        Utz

    2. Hallo,

      document.write("<div id='gesdiv'>");
      was folgendes ergibt: <div id='gesdiv'>, und das ist natürlich Käse, da gehören Anführungszeichen hin, keine Hochkommata. Also nimm statt dessen:
      document.write('<div id="gesdiv">');

      Dort sind doch Anfuehrungszeichen: einfache.

      Ansonsten koennte man auch noch schreiben:
      document.write("<div id="gesdiv">");

      MfG, Thomas

    3. Hi,

      Tach,

      naja, einiges kann man schon noch verbessern :-) Auf den alölerersten Blick fiel mir auf:
      document.write("<div id='gesdiv'>");
      was folgendes ergibt: <div id='gesdiv'>, und das ist natürlich Käse, da gehören Anführungszeichen hin, keine Hochkommata. Also nimm statt dessen:

      Käse ist das, was Du hier erzählst.
      HTML und XHTML (die beide auf SGML basieren) erlauben sowohl einfache als auch doppelte Anführungszeichen bei Attributwerten. Es muß nur das öffnende zum schließenden Anführungszeichen passen.

      Nachzulesen für HTML unter http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2:

      By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa.

      Für XHTML darfst Du die genaue Stelle selber raussuchen.

      Andreas

      1. Hi Andreas,

        HTML und XHTML (die beide auf SGML basieren) erlauben sowohl einfache als auch doppelte Anführungszeichen bei Attributwerten. Es muß nur das öffnende zum schließenden Anführungszeichen passen.

        Nachzulesen für HTML unter http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2:

        Danke für die Info - warum auch immer, bisher war ich davon überzeugt, dass es anders sei. Wieder was gelernt.

        Für XHTML darfst Du die genaue Stelle selber raussuchen.

        Hausaufgabe gemacht: http://www.w3.org/TR/xhtml1/#h-4.4 äußert sich nicht näher dazu, welche Art Anführungszeichen benutzt werden sollen, nur dass sie benutzt werden müssen.

        Grüße,

        Utz