Problem mit removeChild - Befehl

FlorianR

Erfahrenes Mitglied
Hallo Zusammen,

ich habe ein Problem und ich komme patu nicht auf die Lösung.
Ich erzeuge ein Div mit einem Text:

Zuvor erzeuge ich Global das XML Objekt:
PHP:
//XMLHttpRequest Objekt aufbauen
	var http = null;
	if (window.XMLHttpRequest) {
		http = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		http = new ActiveXObject("Microsoft.XMLHTTP");
	}

Der Link:
PHP:
<a href="#" onclick="gameFunktionen.openWindow('items')" id="items">Items</a>

Die Funktion wo der Inhalt und das Div "erzeugt" wird:

PHP:
openWindow: function(bezeichnung){
			// Erstellt ein Fenster und läd den gleichnamigen Inhalt
            objWindow = document.createElement("div");
			objWindow.id = bezeichnung;
            objWindow.className = bezeichnung;
			
			function datenAusgeben(){
				if (http.readyState == 4)  {
					objWindow.innerHTML += http.responseText;
				}
			}
			
			http.open("GET", bezeichnung + ".aspx");
			http.onreadystatechange = datenAusgeben;
			http.send(null);                    
            spielfeld.appendChild(objWindow);

        },

Das klappt wunderbar!

Nun will ich aber das Fenster wieder schließen!

In der datei items.aspx wieder der Link:

PHP:
<a href="gameFunktionen.closeWindow('items')">schlie&szlig;en</a>

Und die Funktion:

PHP:
closeWindow: function(bezeichnung){
			objWindow = document.getElementById(bezeichnung);
			spielfeld.removeChild(objWindow);
		}


Ich hoffe ihr könnt mir weiterhelfen...

Grüße,
Florian
 
Hi,

wenn ich das Konstrukt hier nachstelle, funktioniert es mit deinen Codefragmenten.

Einziges Problem ist, dass bei jedem Aufruf der Methode openWindow ein neues DIV mit identischer ID erstellt wird. Hast du nun bereits mehrere Elemente erstellt und rufst closeWindow auf, wird nur das letzte geschlossen.

Abhilfe schaffst du, indem zu Beginn der Methode openWindow geprüft wird, ob das Fenster bereits existiert. Ist das der Fall, holst du das bestehende Objekt mit Hilfe der Methode getElementById, im anderen Fall wird es erstellt.

Mein Testdokument:
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script type="text/javascript">
  <!--
//XMLHttpRequest Objekt aufbauen
var http = null;
if (window.XMLHttpRequest) {
  http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  http = new ActiveXObject("Microsoft.XMLHTTP");
}

var spielfeld = null;

var gameFunktionen = {

  openWindow: function(bezeichnung){
    // Erstellt ein Fenster und läd den gleichnamigen Inhalt
    // Falls das Element noch nicht existiert -> erstellen
    if( document.getElementById(bezeichnung) == null){
      objWindow = document.createElement("div");
      objWindow.id = bezeichnung;
      objWindow.className = bezeichnung;
    // Falls das Element bereits existiert
    }else{
      objWindow = document.getElementById(bezeichnung);
    }

    function datenAusgeben(){
      if (http.readyState == 4)  {
        objWindow.innerHTML += unescape(http.responseText);
      }
    }

    http.open("GET", "xmlhttp_request_dummy.php"); //bezeichnung + ".aspx");
    http.onreadystatechange = datenAusgeben;
    http.send(null);

    spielfeld.appendChild(objWindow);

  },

  closeWindow: function(bezeichnung){
    objWindow = document.getElementById(bezeichnung);
    spielfeld.removeChild(objWindow);
  }
};

window.onload = function(){
  spielfeld = document.getElementById("mySpielfeld");
}
 //-->
</script>
</head>
<body>
<button onclick="gameFunktionen.openWindow('klasse');">openWindow</button>
<button onclick="gameFunktionen.closeWindow('klasse');">closeWindow</button>
<div id="mySpielfeld"></div>
</body>
</html>
In der Datei xmlhttp_request_dummy.php lasse ich lediglich einen Text ins Dokument schreiben und mit rawurlencode kodieren.

Vielleicht hilft dir das weiter.

Ciao
Quaese
 
Hm,

das komische ist ja, dass er mir kein JavaScript-Error auswirft, sondern bei klick auf schließen eine neue Seite lädt, die nicht gefunden werden kann.

PHP:
The page cannot be found
The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.

Please try the following:

    * Make sure that the Web site address displayed in the address bar of your browser is spelled and formatted correctly.
    * If you reached this page by clicking a link, contact the Web site administrator to alert them that the link is incorrectly formatted.
    * Click the Back button to try another link.

HTTP Error 404 - File or directory not found.
Internet Information Services (IIS)


EDIT:
das muss an der Kaffeeüberdosis liegen...
ein Funktionsaufruf in einem href statt onclick. Na schönen Dank und gute Nacht.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück