molily: Leerzeichen

Beitrag lesen

echo "<td><a href='#' onclick=javascript:updatesong('".$dsatz['song']."','".$dsatz['tid']."');>
".$dsatz['song']."</a></td>";

Es mag auf den ersten Blick kürzer scheinen, HTML-Code in PHP unterzubringen und mit echo auszugeben, aber der Vorteil von PHP ist gerade, umgekehrt PHP-Code in HTML unterzubringen. Das heißt, du startest mit diesem HTML:

<td><a href="#" onclick="updatesong('X', 'Y')">Z</a></td>

X, Y und Z mal als Platzhalter. Dort montierst du nun die Variablen hinein. Sinnvollerweise maskierst du gleich eventuelle Anführungszeichen in deren Werten.

Allerdings scheint X dasselbe wie Z zu sein, daher brauchst du dieselbe Information nicht zweimal im HTML unterbringen, sondern kannst im JavaScript auf den Textknoten im a-Element zugreifen. Dabei kommt dann heraus:

<td><a href="#" onclick="updatesong(this.firstChild.nodeValue, '<?php echo htmlspcialchars($dsatz['tid'], ENT_QUOTES); ?>')"><?php echo htmlspcialchars($dsatz['song'], ENT_QUOTES); ?></a></td>

Ein weiterer Schritt wäre, HTML- und JavaScript-Code zu trennen und dieses Event-Handling mit JavaScript anzustoßen. Vermutlich hast du viele td-Elemente mit Links. Es würde ausreichen, einem übergeordneten Element einen click-Handler zu geben, der alle a-Elemente überwacht. Da du eine Tabelle hast, könnte das übergeordnete Element ein tr- oder das table-Element sein. Dem verpasst du eine ID, um es einfacher in JavaScript ansprechen zu können.

// Nach dem Laden des Dokuments führe aus:  
window.onload = function () {  
   // Vergebe click-Handler an das Element mit der ID tabelle:  
   document.getElementById("tabelle").onclick = handleSongClicks;  
};  
function handleSongClicks (e) {  
   if (!e) e = window.event;  
   // Prüfe Zielelement  
   var zielElement = e.target || e.srcElement;  
   if (e.nodeName != "A") return;  
   // Falls ein a-Element angeklickt wurde, fülle Formularfelder:  
   document.eingabe.song.value = this.firstChild.nodeValue;  
   document.eingabe.tid.value = this.title;  
}

Siehe https://redaktion.selfhtml.org/selfhtml-preview/javascript/einbindung.html

Die "tid" habe ich jetzt mal im title-Attribut untergebracht, der HTML-Code müsste also einfach lauten:

<td><a href="#" title="<?php echo htmlspcialchars($dsatz['tid'], ENT_QUOTES); ?>"><?php echo htmlspcialchars($dsatz['song'], ENT_QUOTES); ?></a></td>

Mathias