Unerklählicher Fehler mit removeChild
Strahler
- javascript
Hallo zusammen,
ich arbeite grade an einer kleine seite. Dabei soll man denn Hintergrund dynamisch ändern könne. das funktioniert eigentlich auch perfekt. Den Hintergrund kann man über ein kleines Dropdown Menü wählen. Das wird mit Javascript erzeugt und nachdem man eine Wahl getroffen hat wird es mit Javascript auch wieder gelöscht (mit dem besagten removeChild). Das funktionirt auch so wie ich mir das vorstelle, nur ich bekomme immer eine fehlermeldung dass was im Script nicht stimmt. Firefox sagt bei mir da folgendes:
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLDivElement.removeChild]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://www.evermore-guild.de/Script/main.js :: hide_menue :: line 67" data: no]
ich weiss echt nicht wo da der fehler ist, wo doch alles so läuft wie ich das gedacht hab.
Hoffe hier kann mit jemand helfen :)
Link zu der Seite ist: www.evermore-guild.de
mfg Strahler
Hi,
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLDivElement.removeChild]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://www.evermore-guild.de/Script/main.js :: hide_menue :: line 67" data: no]
Im HTML:
<div id="bg_men" style="width: 1px; height: 1px; font-size: 1px; line-height: 1px;"></div>
Im JS:
var Div = document.getElementById("bg_men").childNodes[0];
Du versuchst, auf den ersten Kindknoten eines div zuzugreifen (auf umständliche Weise - firstChild existiert), das keinerlei Kindknoten hat.
cu,
Andreas
hi,
Im HTML:
<div id="bg_men" style="width: 1px; height: 1px; font-size: 1px; line-height: 1px;"></div>Im JS:
var Div = document.getElementById("bg_men").childNodes[0];Du versuchst, auf den ersten Kindknoten eines div zuzugreifen (auf umständliche Weise - firstChild existiert), das keinerlei Kindknoten hat.
Doch, nachdem man das Auswahlmenü für das Hintergrundbild "aufklappt" hat, hat das Ding einen Kindknoten - den hat er ja mit
var show = document.getElementById("bg_men");
show.appendChild(div_bg);
da eingefügt.
Und im DOM Inspector ist der auch zu sehen, wenn das Ding aufegklappt ist.
Allerdings kommt im FireBug diese Meldung schon direkt nach dem laden der Seite.
onLoad wird user_bg() aufgerufen, das ruft set_bg() auf - und das wiederum ruft hide_bg() auf, welches versucht ein firstChild zu ermorden, welches noch gar nicht geboren wurde.
gruß,
wahsaga
Hi,
Du versuchst, auf den ersten Kindknoten eines div zuzugreifen (auf umständliche Weise - firstChild existiert), das keinerlei Kindknoten hat.
onLoad wird user_bg() aufgerufen, das ruft set_bg() auf - und das wiederum ruft hide_bg() auf,
hide_menue, nicht hide_bg.
Und in hide_menue steht die von mir zitierte Zeile, die versucht, auf childNodes[0] zuzugreifen - childNodes ist aber mangels Kindknoten null.
welches versucht ein firstChild zu ermorden, welches noch gar nicht geboren wurde.
Nein, zum Mordversuch kommt es gar nicht erst, schon der Versuch, des Kindes habhaft zu werden, geht schief.
cu,
Andreas
hi,
hide_menue, nicht hide_bg.
Und in hide_menue steht die von mir zitierte Zeile, die versucht, auf childNodes[0] zuzugreifen - childNodes ist aber mangels Kindknoten null.
Ja, was sich wie gesagt später ändern/ändern soll - der Aufruf der Funktion kommt einfach zu früh.
Der ganze Zirkus ist aber auch reichlich unübersichtlich geworden, so viele _bg-Funktionen, die sich da inzestuös gegenseitig aufrufen.
gruß,
wahsaga
Hallo wahsaga und MudGuard!
Hm, Abtreibung, Kidnapping, Inzest... Sind wir ein einem HTML Forum? :)
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo zusammen,
hab das Problem gelöst :). hab einfach den aufruf der hide_meue funktion in eine if kostruktion eingebaut die nur ausgefürt wird wenn bg_men auch ein Child hat, also einfach mit hasChildNodes().
Zu der Namensgebung und der Verschachtelung: ich kenn mich das supper aus ;). Bin auch noch recht neue im Javascript Bereich :)
Und vielen Dank für die schnelle Hilfe hat mich echt weiter gebraucht :)
mfg Strahler