ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
1850
1850
EMPFEHLEN
-
Hallo zusammen,
ich bekomme da eine sehr hilflose Fehlermeldung nur beim IE (wie immer
):
Hier mein JS Code:
Aus der Meldung (wie folgt) werde ich einfach nicht schlau:HTML-Code:function showlist(ulMainID, ulSubID) { var mySubObj = document.getElementById(ulSubID); var myMainObj = document.getElementById(ulMainID); if(mySubObj.style.visibility == "hidden") { mySubObj.style.visibility = "visible"; } else{ mySubObj.style.visibility = "visible"; } for(var i = 1; i < document.getElementsByTagName("ul").length; i++) { if(document.getElementsByTagName("ul")[i].id != ulSubID) { if(i <= 7) document.getElementsByTagName("ul")[i].style.visibility = "hidden"; } } }
Code :1 2 3 4 5
Meldung: Objekt erforderlich Zeile: 5 Zeichen: 2 Code: 0 URI: http://localhost/js/navigation.js
Weiß jemand woran das liegen könnte?
Vielen 1000 Dank.
Viele Grüße
Soezkan
-
Moin Soezkan,
mal angenommen, die gemeldete Zeile stimmt, dann würde das bedeuten, dass es kein Element mit der besagten ID gibt.
Woran es wirklich hapert, könnte man am Besten sagen, wenn man die Sache Live vor Augen hat.
-
Danke schonmal für die Antwort.
Ich kann nichts live präsentieren, da alles hier lokal läuft im Moment.
Die Sache ist die: ich benutze das Script für die Steuerung einer Navigation, die bestimmte Bereiche (Listenelemente) ein- und ausblendet. Wenn die Seite neu geladen wird, dann gibt es keinen Fehler, erst beim Mouseover, will der ein Objekt.
Die Frage ist halt, welches Objekt? Und die andere Frage ist, welche das Problem wahrscheinlich lösen könnte, ist wie ich so ein Objekt u.U. schonmal vorinitialisiere?
Vielen, vielen Dank für mehr Tipps.
Liebe Grüße,
Soezkan
-
04.08.09 13:05 #4
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.418
Hi,
Das müsstest Du schon selbst wissen. Der Funktion müssen 2 IDs von HTML-Elementen übergeben werden. Welche das sind, kann hier ja niemand wissen.
Es müssen einfach die Elemente mit den IDs, die da übergeben werden existieren. Ohne Online-Beispiel oder Quellcode kann man aber nicht sagen, wo der Fehler liegt könnte. An der Funktion ist jedenfalls nichts zu sehen. Du könntest Dir auch per alert() mal ausgeben lassen, was da eigentlich übergeben wird.
LGDa es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
Naja, du hast ja das Objekte(die Variablen) ansich "initialisiert".
Code :1 2
var mySubObj = document.getElementById(ulSubID); var myMainObj = document.getElementById(ulMainID);
Der Zugriff auf diese Variablen verursacht keinen Fehler.
Sofern aber die HTML-Elemente nicht existieren, verursacht der Zugriff auf deren style-Eigenschaft den Fehler.
getElementById() liefert im Erfolgsfall einen Zeiger auf das HTML-Element, und im Fehlerfall "false".
Du könntest also, bevor du auf die Variablen zugreifst, prüfen, ob diese "wahr" sind, alse einen Wert enthalten, der dem booleschen "true" entspricht, was der Fall ist, wenn das betreffende HTML-Element existiert.
-
Danke schonmal für die Antwort.
Das komische ist eben, dass ich nicht weiß, welches Objekt er nicht finden kann, denn wenn die Seite neu geladen wurde, dann ist da ja kein Fehler, erst wenn ich über die Menüpunkte fahre
Hier ist das HTML (sehr langer Code, tut mir leid
, das CSS erspare ich euch
):
HTML-Code:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Meine Seite</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <meta name="description" content=""> <link rel="stylesheet" type="text/css" href="meinstyle.css"> <!--[if IE 8]> <style type="text/css">img#horizontal_navi_divider { position: relative; z-index: 100; left: 0; top: 26px; width: 938px; height: 1px; }</style> <![endif]--> <script type="text/javascript" src="js/navigation.js"></script> </head> <body> <div id="Container"> <div id="LeftBox" onMouseover="hidemenu('first')"> </div> <div id="RightBox" onMouseover="hidemenu('first')"><img id="vertical_right_line" src="images/vertical_right_line.jpg" alt=""></div> <div id="ContentBox"> <div id="Header" onMouseover="hidemenu('first')"><a href="startseite.php"><img id="toprightlogo" src="images/logo.jpg" alt="Grooveyard Berlin"></a></div> <div id="HeaderNavigation"> <ul id="menu"> <li id="first" class="first_active" onmouseover="showlist('first', 'list1', 'first')" onMouseout="fallback('first')"><a href="startseite.php">Link1</a> <ul id="list1"> </ul> <br /> </li> <li id="second" class="second" onmouseover="showlist('second', 'list2', 'first')" onMouseout="fallback('first')"><a href="a.php">Link2</a> <ul id="list2" onMouseout="hidemenu('first')"> <li class="second"><a class="subsecond" href="a.php" title="">Unterlink1</a></li> <li class="second"><a class="subsecond" href="b.php" title="">Unterlink2</a></li> <li class="second"><a class="subsecond" href="c.php" title="">Unterlink3</a></li> </ul> <br /> </li> <li id="third" class="third" onmouseover="showlist('third', 'list3', 'first')" onMouseout="fallback('first')"><a href="d.php">Link3</a> <ul id="list3"> </ul> <br /> </li> <li id="fourth" class="fourth" onmouseover="showlist('fourth', 'list4', 'first')" onMouseout="fallback('first')"><a href="e.php">Link4</a> <ul id="list4" onMouseout="hidemenu('first')"> <li class="fourth"><a class="subfourth" href="e.php" title="">Unterlink1</a></li> <li class="fourth"><a class="subfourth" href="g.php" title="">Unterlink2</a></li> </ul> <br /> </li> <li id="fifth" class="fifth" onmouseover="showlist('fifth', 'list5', 'first')" onMouseout="fallback('first')"><a href="h.php">Link5</a> <ul id="list5" onMouseout="hidemenu('first')"> <li class="fifth"><a class="subfifth" href="h.php" title="">Unterlink1</a></li> <li class="fifth"><a class="subfifth" href="i.php" title="">Unterlink2</a></li> <li class="fifth"><a class="subfifth" href="j.php" title="">Unterlink3</a></li> <li class="fifth"><a class="subfifth" href="k.php" title="">Unterlink4</a></li> </ul> <br /> </li> <li id="sixth" class="sixth" onMouseout="fallback('first')"> <ul id="list6"> </ul> <br /> </li> <li id="seventh" class="seventh" onmouseover="showlist('seventh', 'list7', 'first')" onMouseout="fallback('first')"><a href="l.php">Link6</a> <ul id="list7" onMouseout="hidemenu('first')"> <li class="seventh"><a class="subseventh" href="l.php" title="">Unterlink1</a></li> <li class="seventh"><a class="subseventh" href="m.php" title="">Unterlink2</a></li> </ul> <br /> </li> </ul> <img id="horizontal_navi_divider" src="images/horizontal_bottom_inv_line.jpg" alt=""> </div> <div id="Content"> <div id="LeftColumn"> <p id="LeftImage"><img id="left_image" src="images/whitespacer.gif" alt=""></p> <p id="LeftMenu_startseite">Hallo</p> </div> <div id="RightColumn"> <h1>Hallo</h1> <p><br /> Sed ac arcu diam, eget eleifend sapien. Donec ac elit in metus bibendum egestas non ut dui? Quisque odio massa, ullamcorper non egestas convallis, pretium sed metus. Suspendisse consectetur metus quis sapien volutpat et laoreet augue consequat! Sed condimentum auctor nisi, eget tristique tortor condimentum ut. </p> </div> </div> <div id="Spacer"><img class="horizontal_lines" src="images/horizontal_bottom_line.jpg" alt=""></div> <div id="FooterNavigation"> <img class="horizontal_lines" src="images/horizontal_bottom_line.jpg" alt=""> <ul> <li><a href="#">Agb</a></li> <li><a href="#">Disclaimer</a></li> <li><a href="sitemap.php">Sitemap</a></li> <li><a href="impressum.php">Impressum</a></li> <li><a href="kontakt.php">Kontakt</a></li> </ul> </div><img src="images/horizontal_bottom_line.jpg" width="100%" height="1" border="0" alt=""> </div> <div style="clear: both;"> </div> </div> </body> </html>
Wichtig zu wissen, ist das der dritte Parameter, der an die Funktion showlist()
übergeben wird und der erste Parameter, der an die anderen beiden Funktionen hidemenu() und fallback() übergeben wird, vom PHP aus dort hineingeschrieben wird: nämlich der Name der aktuell angezeigten Seite.
Der JS Code hat sich seither auch etwas verändert, trotzdem ist der Fehler geblieben. Hier der aktuelle JS Code (navigation.js):
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
function showlist(ulMainID, ulSubID, active){ var myMainObj = document.getElementById(ulMainID); var mySubObj = document.getElementById(ulSubID); var myActiveObj = document.getElementById(active); switch(active) { case "first": var activeSub = "list1_active"; break; case "second": var activeSub = "list2_active"; break; case "third": var activeSub = "list3_active"; break; case "fourth": var activeSub = "list4_active"; break; case "fifth": var activeSub = "list5_active"; break; case "sixth": var activeSub = "list6_active"; break; case "seventh": var activeSub = "list7_active"; break; } var myActiveSubObj = document.getElementById(activeSub); if(mySubObj.style.visibility == "hidden"){ mySubObj.style.visibility = "visible"; } else{ mySubObj.style.visibility = "visible"; } for(var i = 1; i < document.getElementsByTagName("ul").length; i++) { if(document.getElementsByTagName("ul")[i].id != ulSubID) { if(i <= 7) document.getElementsByTagName("ul")[i].style.visibility = "hidden"; } } } function hidemenu(active) { var myActiveObj = document.getElementById(active); switch(active) { case "first": var activeSub = "list1_active"; break; case "second": var activeSub = "list2_active"; break; case "third": var activeSub = "list3_active"; break; case "fourth": var activeSub = "list4_active"; break; case "fifth": var activeSub = "list5_active"; break; case "sixth": var activeSub = "list6_active"; break; case "seventh": var activeSub = "list7_active"; break; } for(var i = 1; i < document.getElementsByTagName("ul").length; i++) { if(i <= 7 && document.getElementsByTagName("ul")[i].id != activeSub) document.getElementsByTagName("ul")[i].style.visibility = "hidden"; } document.getElementById(activeSub).style.visibility = "visible"; } function fallback(active) { var myActiveObj = document.getElementById(active); switch(active) { case "first": var activeSub = "list1_active"; break; case "second": var activeSub = "list2_active"; break; case "third": var activeSub = "list3_active"; break; case "fourth": var activeSub = "list4_active"; break; case "fifth": var activeSub = "list5_active"; break; case "sixth": var activeSub = "list6_active"; break; case "seventh": var activeSub = "list7_active"; break; } document.getElementById(activeSub).style.visibility = "visible"; }
Bitte nicht schimpfen, habe mir echt einen abgebrochen als JS-Amateur.
Vielen Dank auf jeden Fall für einen Tipp!
Liebe Grüße
Soezkan
-
04.08.09 15:41 #7
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.418
Hi,
Du setzt in den Funktionen eine Variable activeSub auf "listX_active" und versuchst dann per getElementById(), das HTML-Element mit der ID activeSub anzusprechen. Es gibt in Deinem HTML-Dokument aber keine Elemente, die eine solche ID haben. Da hast du wohl was vergessen? Übrigens spuckt Firebug da natürlich auch jede Menge Fehlermeldungen (und die sind dann auch aussagekräftig).
BTW kann man so ein Menü auch ohne Javascript rein über CSS umsetzen.
LGDa es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
04.08.09 18:01 #8Maik Tutorials.de Gastzugang
So sieht's aus

- http://www.htmldog.com/articles/suckerfish/dropdowns/ (hier kommt lediglich für den IE6 und älter JS zum Einsatz)
- http://www.cssplay.co.uk/menus/ -> Multi-Level-Dropline / Multi-Level-Dropdown
mfg Maik
-
Danke für die Antwort.
Also das Problem ist, dass sich die Struktur der Listen verändert. Und manchmal, geht man auf eine andere php-Datei, bekommt eine entsprechende UL-Liste eine neue ID, damit sie immer sichtbar bleibt, also "listX_active", wie z.B.
HTML-Code:<li id="fourth" class="fourth_active" onmouseover="showlist('fourth', 'list4', 'fourth')" onMouseout="fallback('fourth')"><a href="e.php">Hörbeispiele</a> <ul id="list4_active" onMouseout="hidemenu('fourth')"> <li class="fourth_active"><a class="subfourth" href="e.php" title="">mit</a></li> <li class="fourth"><a class="subfourth" href="g.php" title="">ohne</a></li> </ul> <br /> </li>
Das bedeutet, ich brauche die Zuweisungen in den Switches um das Menü zu steuern.
Was ich nicht kapiere, welches Objekt gemeint ist? Oder kann man dann irgendwie den Objekten schonmal einen "Nullwert" zuweisen?
Fällt Dir vielleicht trotzdem noch was ein hierzu?
Und wenn Du das mit CSS ansprichst: ich habe zuerst eine CSS-Navi probiert, die aber gestreikt hat, da ich zwischen Haupnavi und Subnavi zum "Verzieren" eine Linie gesetzt habe. Die beiden Navigationen sind somit voneinander getrennt => Man konnte in der CSS-Version nichts in der Subnavi auswählen, darum JS.
Danke schonmal!
-
Ich habs gelöst
Hurra!
Es lag an daran, das ich die Objekte nicht richtig verglichen habe in
Code :1 2 3 4 5
for(var i = 1; i < document.getElementsByTagName("ul").length; i++) { if([COLOR="DarkRed"]document.getElementsByTagName("ul")[i].id != ulSubID[/COLOR]) { if(i <= 7) document.getElementsByTagName("ul")[i].style.visibility = "hidden"; } }
Das habe ich jetzt mal geändert und der neue Code sieht wie folgt aus (Objekte werden richtig verglichen, siehe Bspw. in for-Schleife:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
function showlist(ulMainID, ulSubID, active){ //alert(ulMainID + ", " + ulSubID + ", " + active); var myMainObj = document.getElementById(ulMainID); var mySubObj = document.getElementById(ulSubID); var myActiveObj = document.getElementById(active); if(mySubObj.style.visibility == "hidden"){ mySubObj.style.visibility = "visible"; mySubObj.style.zIndex = 111; } else{ mySubObj.style.visibility = "visible"; mySubObj.style.zIndex = 111; } for(var i = 1; i < document.getElementsByTagName("ul").length; i++) { if([COLOR="Green"]document.getElementsByTagName("ul")[i].id != mySubObj.id[/COLOR]) { if(i <= 7) document.getElementsByTagName("ul")[i].style.visibility = "hidden"; } } } function hidemenu(active) { var myActiveObj = document.getElementById(active); switch(active) { case "first": var activeSub = "list1_active"; break; case "second": var activeSub = "list2_active"; break; case "third": var activeSub = "list3_active"; break; case "fourth": var activeSub = "list4_active"; break; case "fifth": var activeSub = "list5_active"; break; case "sixth": var activeSub = "list6_active"; break; case "seventh": var activeSub = "list7_active"; break; } var myActiveSubObj = document.getElementById(activeSub); for(var i = 1; i < document.getElementsByTagName("ul").length; i++) { if(i <= 7 && document.getElementsByTagName("ul")[i].id != myActiveSubObj.id) document.getElementsByTagName("ul")[i].style.visibility = "hidden"; } document.getElementById(activeSub).style.visibility = "visible"; } function fallback(active) { var myActiveObj = document.getElementById(active); switch(active) { case "first": var activeSub = "list1_active"; break; case "second": var activeSub = "list2_active"; break; case "third": var activeSub = "list3_active"; break; case "fourth": var activeSub = "list4_active"; break; case "fifth": var activeSub = "list5_active"; break; case "sixth": var activeSub = "list6_active"; break; case "seventh": var activeSub = "list7_active"; break; } var myActiveSubObj = document.getElementById(activeSub); myActiveSubObj.style.visibility = "visible"; }
Vielen Dank für die tolle Hilfe auf jeden Fall
Grüße!
Soezkan
Ähnliche Themen
-
Richtige Syntax bei Operatorüberladung, wann sind "friend", "const", "&" nötig?
Von mrs_schokokeks im Forum C/C++Antworten: 4Letzter Beitrag: 25.08.10, 19:13 -
Objekt "aushölen"//voneinander "abziehen"
Von Kordelle im Forum Autodesk Maya (ehemals Alias)Antworten: 1Letzter Beitrag: 10.07.09, 10:14 -
Fehlermeldung "Objekt erforderlich"
Von P_H_I_L im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 25.02.08, 17:40 -
Programm sagt: "kein Java installiert" obwohl eines ist
Von Jotho im Forum JavaAntworten: 1Letzter Beitrag: 12.03.05, 20:07 -
"Objekt ist Null oder kein Objekt" obschon Objekt existiert
Von raphk im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 03.01.04, 12:44





Zitieren

Login





