molily: JavaScript Aufruf wie in CSS Datei definieren?

Beitrag lesen

Hier nochmal ein vollständiges Beispiel für Event-Delegation. Man definiert nur den einen zentralen Event-Handler, dafür ist die Handler-Funktion etwas komplizierter. Man sucht sich das TR-Element heraus und ändert dort die Klassen. Die ganze Formatierung habe ich in die Klassen ausgelagert. Das ist alles etwas komplizierter, als es müsste, weil du gesagt hast, dass IE 6 unterstützt werden muss.

<!doctype html>  
<html>  
<head>  
<script>  
[code lang=javascript]/* Phase 1 */  
window.onload = initTableRowHighlight;  
  
/* Phase 2 */  
function initTableRowHighlight () {  
	document.getElementById("tabelle").onclick = tableRowHighlight;  
}  
  
/* Phase 3 */  
function tableRowHighlight (e) {  
	/* Vereinheitliche den Zugriff auf das Event-Objekt und das Zielelement */  
	if (!e) {  
		e = window.event;  
	}  
	var target = e.target || e.srcElement;  
	  
	/* Steige im Elementbaum ausgehend vom Zielelement auf und suche das zugehörige TR-Element.  
	Wenn zuerst TABLE gefunden wird, dann breche ab. Dann werden wir nämlich kein TR mehr finden  
	(außer bei verschachtelten Tabellen). */  
	var el = target, tagName;  
	do {  
		tagName = el.nodeName.toLowerCase();  
		if (tagName == "tr") {  
			/* TR gefunden! */  
			break;  
		}  
		if (tagName == "table") {  
			return;  
		}  
	} while (el = el.parentNode); /* Steige über parentNode auf */  
	  
	/* IE 6 kann keine multiplen Klassen. Also machen wir es zu Fuß. */  
	var className = el.className;  
	if (className == "highlight" || className == "secondhighlight") {  
		/* Lösche »highlight« aus dem Klassennamen, wenn vorhanden */  
		el.className = className.replace("highlight", "");  
	} else {  
		/* Füge »highlight« zum Klassennamen hinzu */  
		el.className += "highlight";  
	}  
}

</script>
<style>

table {  
	border-spacing: 0;  
	border-collapse: collapse;  
}  
tr {  
	background-color: white;  
	margin: 10px; padding: 10px;  
}  
tr.second {  
	background-color: #ddd;  
}  
tr.highlight,  
tr.secondhighlight {  
	border: 1px solid black;  
}  
/* Highlight von geraden Zeilen */  
tr.highlight {  
	background-color: #eef;  
}  
/* Highlight von ungeraden Zeilen */  
tr.secondhighlight {  
	background-color: #bbf;  
}  
td {  
	border: 1px solid #ccc;  
	padding: 5px;  
}

</style>
</head><body>

<table id="tabelle">
<tr><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
<tr class="second"><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
<tr><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
<tr class="second"><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
<tr><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
<tr class="second"><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
<tr><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
<tr class="second"><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td><td>bla<strong>bla</strong></td></tr>
</table>

</body></html>[/code]

Ich weiß nicht, in wie weit du deinen Code anpassen kannst, damit du dieses Modell verwenden kannst. Wie du konkret die Farben änderst, ist ja auch egal - du musst nicht mit Klassen arbeiten, auch wenn das viel übersichtlicher ist. Der Aufbau der Event-Handler-Funktion dürfte allerdings gleich sein: Zielelement ansprechen, TR-Element heraussuchen, dort die Formatierungen ändern abhängig vom gegenwärtigen Status.

Mathias