XHTML Dynamisch generierte Javascripte
lotte
- javascript
0 Utz0 Besserwisser0 Utz
0 Thomas Meinike0 AndreasW0 Utz
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 = "";
}
}
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
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
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
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
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
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