Collapse-Expand-Beschreibungserweiterung geht nur im IE nicht

Scorp1337

Erfahrenes Mitglied
Hallo,
ich bin nicht sicher ob es ein CSS oder JS Fehler ist, allerdings scheint es eher eine JS Problematik zu sein.

Mit einer while()-Schleife werden mySQL-Querys ausgeführt und geben eine Tabelle aus. Dessen letzte Spalte zeigt das Kommentarfeld. Wenn mehr als 3 Zeilen Kommentartext vorhanden sind wird ein "Klapptext" draus gemacht.

Mein JS-Code & PHP-Funktion
Code:
function moreLines(ln) {
	document.getElementById("ext"+ln).setAttribute("onClick", "lessLines("+ln+")");
	document.getElementById("hiddencomment"+ln).setAttribute("class", "");
}
	
function lessLines(ln) {
	document.getElementById("ext"+ln).setAttribute("onClick", "moreLines("+ln+")");
	document.getElementById("hiddencomment"+ln).setAttribute("class", "hide");
}
PHP:
function commentNew ( $comment, $ln ) {
	$commentArr = explode("<br />", $comment);
	if(count($commentArr) > 3) {
		$newcomment = "<ul>";
		for($i=0;$i<3;$i++) {
			$newcomment .= "<li>" . $commentArr[$i] . "</li>";
		}
		$newcomment .= "</ul><ul class=\"hide\" id=\"hiddencomment" . $ln . "\">";
		for($x=3;$x<count($commentArr);$x++) {
			$newcomment .= "<li>" . $commentArr[$x] . "</li>";
		}
		$newcomment .= "</ul><div class=\"ext\" id=\"ext" . $ln . "\" onClick=\"moreLines(" . $ln . ")\" />";
	}
	else {
		$newcomment = $comment;
	}
	return $newcomment;
}

Meine ganz simple Frage ist, was ich falsch gemacht habe oder extra anpassen muss?
Die Vermutung auf CSS ist, weil ich ja keinen eigentlichen "Link" habe, sondern bei einem Container das onClick anwende.
Internet Explorer tut nicht.

Firefox, Opera, Chrome, Safari lässt sich der Text wundervoll auf- und zuklappen.
 
Die Zuweisung von Eventüberwachungen funktionieren im IE per setAttribute() nur, wenn du eine Funktion als Wert zuweist:

Code:
.setAttribute('onclick',function(){lessLines(ln)});

allerdings ist diese Methode nicht empfehlenswert da diese Überwachung durch Unachtsamkeit schnell mal überschrieben werden kann und obendrein Ausgangspunk für Speicherlecks sein kann.

Verwende besser:
[MSIE bis V8]attachEvent()
[Sonstige]addEventListener()
 
Zuletzt bearbeitet:
Hi,
tausend Dank für den Tipp!
Ein ganz wichtiger Punkt war aber ebenfalls noch ein Problem: Der IE scheint immernoch (Lösung in einem Forenpost von 2004!!) Probleme mit dem Attribute "class" zu haben. Mit className funktionierts.

Vielen Vielen vielen vielen vielen Vielen vielen DANK! :D
 
Zurück