Skript funktioniert nur in FF korrekt

hi, ich habe feolgendes Skript geschrieben, welches ich zur Navigation verwende.
leider funktioniert es nur im Firefox. bei den anderen browsern (opera, ie, ) klappt das menü auf und gleich wieder zu (aber mit den richtigen links).
woran lieg das?
könnt ihr mal drüberschauen? danke

zur information: die parameter array sind Arrays voller html-links, die ich zuvor definiert und gefüllt habe
klickt man auf den „aufklapp-button“ wird immer toggle_nav() aufgerufen.

Code:

function show_nav(id,array)
{
var a = document.getElementById(id);
var c="";
if(a)
{
c="";
for(var b=0; b"+array[b]+"";
}
c+="";
a.innerHTML=c;
}
}

function hide_nav(id)
{
var a = document.getElementById(id);
if(a)
{
a.innerHTML="";
}
}

function toggle_nav(id,array)
{
var a = document.getElementById(id);
if(a.innerHTML!="")
hide_nav(id);
else
show_nav(id,array);
}

Hi Stefan,

ich sehe nur, dass du da ein Ausrufezeichen drin hast, wo es nicht hingehört meiner Meinung nach:

function show_nav(id,array)
{
var a = document.getElementById(id);
var c="";
if(a)
{
c="";
for(var b=0; b"+array[b]+"";
}
c+="";
a.innerHTML=c;
}
}
function hide_nav(id)
{
var a = document.getElementById(id);
if(a)
{
a.innerHTML="";
}
}

function toggle_nav(id,array)
{
var a = document.getElementById(id);
if(a.innerHTML_ ! _="")
hide_nav(id);
else
show_nav(id,array);
}

Gruß
BT

hi

erstmal danke für die antwort

die if soll ja prüfen ob schon was in innerHTML drin ist. wenn ja, soll er ja verstecken. andersrum wärs ja nonsens

Hallo,
innerHTML ist doch kein Standard und sollte besser nicht verwendet werden, stattdessen im Tabellenfeld firstChild.nodeValue=TEXT bzw. sonst nodeValue=TEXT.
Gruss Joachim

Hi Stefan,

die if soll ja prüfen ob schon was in innerHTML drin ist.

dann müsstest du aber innerHTML= schreiben, und nicht innerHTML ! =

oder kapier ich das nicht?

Fragt
BT

entweder hast du keine ahnung oder ich

mit != prüfe ich ob der inhalt von innerhtml nicht gleich „“ ist. in worten:
„wenn der Text im Div-bereich ungleich leer, dann…“

@joachim: mit nodeValue komm ich irgendwie nicht klar, der erkennt gar kein html. mit createElement soll man das irgendwie übelst umständlich erzeugen können, kann aber nicht erkennen, wie man die href-angabe übergeben kann

Hi Stefan,

ich hatte keine Ahnung.

mit != prüfe ich ob der inhalt von innerhtml nicht gleich „“
ist. in worten:
„wenn der Text im Div-bereich ungleich leer, dann…“

Jetzt hab ich etwas Ahnung (aber auch nicht mehr) davon.

Ich kann nur „programmieren“ durch Versuch und Irrtum beim Verändern von vorhandenem Script.
Dabei kommt mir meine Genauigkeit des Hinschauens aber zu Gute, wie auch beim Lektorieren von Text.

Gruß
BT

Link einfuegen
Ja so kann man keine Knoten erzeugen nur ändern.
Hier ein Beispiel, das ich gerade getestet habe,
nach Start zuerst Runter-Taste:

var IE=false;

 IE=true;

function Link(i,z1,z2) {
with (document.getElementsByTagName('td')[i]) {
 firstChild.href=z1;
 firstChild.firstChild.nodeValue=z2;
} }
function Taste(event) {
var k,i;
 if(IE) k=window.event.keyCode;
 else k=event.which;
//alert(k);
 if (k==40) for (i=0; i\<3; i++) Link(i,'','');
 if (k==38) Link(0,'http://www.wer-weiss-was.de','oben');
 if (k==37) Link(1,'http://www.wer-weiss-was.de/nix','links');
 if (k==39) Link(2,'http://www.wer-weiss-was.de/muell','rechts');
}//Taste
document.onkeyup=Taste;

Beispiel

.
.
.

Ende

Hallo Stefan,

für ein Aufklappmenü benötigt man doch gar kein Javascript in normalen Browsern, das macht man mit CSS indem man dort die Pseudoklasse :hover nutzt und beim IE, der :hover nur in Bezug auf A-Elemente versteht, hilft man halt ein bisschen mit JavaScript nach.

Was du mit dem Tabellengewusel um die einzelnen Links herum bezweckst, erschließt sich mir auch nicht: Wenn es um die Darstellung der Links geht, so kannst du auch dies besser mit CSS machen, denn dafür ist es ja da.

Wenn du irgendwann einmal die ganze HTML-Code-Struktur beim Überfahren mit der Maus ändern musst, würde ich an deiner Stelle eher mit DOM-Methoden wie appendChild(), replaceChild() und removeChild() arbeiten.

Aber ich denke, in deinem Fall reicht es, einfach die Display-Eigenschaft der mit der Maus überfahrenen Elemente zu manipulieren.

Etwas Ähnliches wurde ja erst unlängst im Schwesterbrett HTML und CSS diskutiert.

http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…

Gruß Gernot

function show_nav(id,array)
{
var a = document.getElementById(id);
var c="";
if(a)
{
c="";
for(var b=0; b"+array[b]+"";
}
c+="";
a.innerHTML=c;
}
}

innerHTML ist doch kein Standard

Das stimmt zwar …

und sollte besser nicht verwendet werden,

… das halte ich aber für ein Gerücht; ich kenne keinen modernen Browser, bei dem sich das innerHTML eine Elements nicht abweichend vom proprietären ALL-Objekt, für das es ursprünglich erfunden wurde, auch über DOM-getElement(s)By(…)-Methoden ansprechen ließe.

http://developer.mozilla.org/en/docs/DOM:element.inn…

Probleme kann es allerdings insbesondere bei einem innerHTML geben, wenn es seinerseits (re)aktive Elemente wie etwa Links enthalten soll.

stattdessen im Tabellenfeld
firstChild.nodeValue=TEXT bzw. sonst nodeValue=TEXT.

Das dürfte wohl mindestens dieselben, wenn nicht gar noch mehr Probleme bereiten. Zum Einhängen ganzer Zweige und Äste in den DOM-Baum gibt es Methoden des Node-Objekts wie appendChild und insertBefore(), die man nach einem document.createElement() nutzen kann.

Bei einer einfachen Aufklappnavigation ist sowas aber nun wirklich gar nicht angesagt.

Gruß Gernot