Prüfen ob Div einen Inhalt besitzt - Fehler im IE

Michael_K

Mitglied
Hallo,

ich versuche, mit folgender Funktion zu prüfen, ob der Container ibox_content einen Inhalt enthält, oder nicht:
Code:
checkIboxContent = function() {
	var e = document.getElementById('ibox_content');
	
	if (e.innerHTML.length != 0) {
		return true;
	} 
	else { 
		return false;
	}
}
Beim ersten Aufruf der Funktion ist der Container immer leer. Die Funktion müsste also ein false zurückgeben. Das tut sie auch - in allen Browsern, außer den Internet Explorer 6 + 7.

Weiß jemand, wieso dies so ist, und wie man das Problem beheben kann? Ich scheine Tomaten auf den Augen zu haben ...

Gruß
Michael
 
Hi,

bei mir funktioniert das Script wie erwartet.
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">
<!--
checkIboxContent = function() {
  var e = document.getElementById('ibox_content');

  if (e.innerHTML.length != 0) {
    alert("nicht leer ");
    return true;
  }else{
    alert("leer");
    return false;
  }
}
//-->
</script>
</head>

<body>
<button onclick="checkIboxContent();">checkIboxContent()</button>
<div id="ibox_content"></div>
</body>
</html>
Ciao
Quaese
 
Hallo Quaese,

Danke für Deine Antwort. In Deinem Beispiel funktioniert die Funktion tatsächlich. Dann liegt mein Fehler wohl doch wo anders.
Folgende Funktion ruft checkIboxContent() auf. Ich lade Inhalt per Ajax in ein kleineres Fenster (ibox_content) über der eigentlichen Seite, und dunkele den restlichen Hintergrund (ibox_w) ab. Wenn ich durch einen Link den Inhalt in der bereits bestehenden Box verändere, soll der Hintergrund aber weiterhin dunkel bleiben, und nicht erneut aufhellen und abdunkeln. Darum prüfe ich, ob ibox_content bereits einen Inhalt enthält, oder nicht.
Code:
showBG = function() {
	
	if (!checkIboxContent()) {
		var box_w = getElem('ibox_w');
	

		box_w.style.opacity = 0;
		box_w.style.filter = 'alpha(opacity=0)';
		setBGOpacity = setOpacity;
		for (var i=0;i<=opacity_level;i++) {setTimeout("setIboxOpacity('ibox_w',"+i+")",70*i);} 
	
	
		box_w.style.display = "";
		var pagesize = new getPageSize();
		var scrollPos = new getScrollPos();
		var ua = navigator.userAgent;
	
		if(ua.indexOf("MSIE ") != -1) {box_w.style.width = pagesize.width+'px';} 
		
		box_w.style.height = pagesize.height+scrollPos.scrollY+'px';
	}
	else {
		document.write("Box ist nicht leer");
	}

}
Die else-Bedingung habe ich nur zur Demonstration angefügt - in jedem Browser wird nun zunächst einmalig die Box abgedunkelt, und beim Klick mit gefüllter Box die Meldung gebracht. Nur die Internet Explorer sagen sofort, dass die Box nicht leer sei.
Hast Du oder jemand anders eine Idee, wo mein Fehler liegt?
 
Hi,

ich weiss nicht, ob dir meine Antwort hilfreich sein wird, versuchen wir es mal.

Wenn ich dein Problem hier nachstelle und die Funktionen/Objekte, die du ausserdem benutzt simuliere, funktioniert es bei mir wiederum problemlos. Das einzige, womit ich nichts anfangen konnte, ist die Zeile
Code:
setBGOpacity = setOpacity;
Hier 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">
<style type="text/css">
* { margin:0;
    padding:0;}

body, html{ width: 100%; height: 100%;}
</style>

<script type="text/javascript">
<!--
// ----------------------------------------------------------------------------------------------
checkIboxContent = function() {
  var e = document.getElementById('ibox_content');

  if (e.innerHTML.length != 0) {
    return true;
  }else{
    return false;
  }
}
showBG = function() {

  if (!checkIboxContent()) {
    var box_w = document.getElementById("ibox_w"); //getElem('ibox_w');

    opacity_level = 80;
    box_w.style.opacity = 0;
    box_w.style.filter = 'alpha(opacity=0)';
    box_w.style.MozOpacity = 0;
//		setBGOpacity = setOpacity;
    for (var i=0;i<=opacity_level;i+=10) {setTimeout("setIboxOpacity('ibox_w',"+i+")",10*i);}

    box_w.style.display = "block";
    document.getElementById("ibox_content").innerHTML = "Inhalt aus Ajax";

    var pagesize = new getPageSize();
    var scrollPos = new getScrollPos();
    var ua = navigator.userAgent;

    if(ua.indexOf("MSIE") != -1) { box_w.style.width = pagesize.width + 'px'; }
    box_w.style.height = pagesize.height + scrollPos.scrollY + 'px';
  }else{
    alert("Box ist nicht leer");
  }
}

function getPageSize(){
  this.width = 800;
  this.height = 800;
}
function getScrollPos(){
  this.scrollY = 0;
}
function setIboxOpacity(strID, dblStep){
  var objBoxStyle = document.getElementById(strID).style;
  if(document.all && !window.opera){ // IE
    objBoxStyle.filter = "alpha(opacity="+dblStep+")";
  }else if(objBoxStyle.opacity && !window.sidebar){  // Opera
    objBoxStyle.opacity = (dblStep/100);
  }else if(window.sidebar){  // Mozilla
    objBoxStyle.MozOpacity = (dblStep/100);
  }
}
// ----------------------------------------------------------------------------------------------

//-->
</script>
</head>
<body>
<div id="ibox_w" style="position: absolute; width: 100%; height: 100%; background: #000; z-index: 2; display: none;"></div>
<button onclick="showBG();" style="position: absolute; z-index: 3;">showBG()</button>
<button onclick="checkIboxContent();">checkIboxContent()</button>
<div id="ibox_content" style="position: absolute; z-index: 3; background: #fff;"></div>
</body>
</html>
Der Inhalt der Box wird nicht per Ajax, sondern in der Funktion showBG eingefügt.

Ciao
Quaese
 
Hi Quaese,

Danke für das Nachstellen meines Problems in Deinem Testdokument. Es funktioniert auch bei mir tatsächlich einwandfrei - nur erkenne ich keinen Unterschied zwischen Deinem Test und meinem tatsächlichen Script, das den Fehler rechtfertigen würde. Die Ursache liegt wahrscheinlich in den Weiten der gesamten js-Datei (ist eine Modifikation von iBox) - mittlerweile habe ich herausgefunden, dass die IEs mit leerem Cache einmalig alles richtig machen, und der Fehler erst anschließend wieder auftritt.
Allerdings ist mir ein Workaround eingefallen - ich will ja nur wissen, ob die Box schon sichtbar ist oder nicht, und das kann ich auch nachprüfen, in dem ich schaue, ob der Schatten gerade angezeigt wird. Dagegen scheinen auch die Internet Explorer nichts zu haben, bislang funktioniert alles.
Mein Hauptproblem ist also gelöst. Danke nochmal für Deine Mühe. :)

Viele Grüße
Michael
 

Neue Beiträge

Zurück