Felix Riesterer: Master-Slave Problem Liederbuch: Master-Seite soll nicht neu geladen werden

Beitrag lesen

problematische Seite

Lieber Linuchs,

<a class=regie onclick="javascript:regie_sende( 'text','#lied_01' )" title="Nr. 1 an Slaves senden"></a>

das "javascript:" benötigst Du nur im href-Attribut. Wenn Du allen Ernstes das onclick-Attribut verwendest, dann musst Du dafür sorgen, dass der Rückgabewert der aufgerufenen Funktion (nein, nicht regie_sende, sondern HTMLElementObject.onclick!) ein false ergibt. Das geht z.B. so:

<a onclick="regie_sende( 'text','#lied_01' ); return false;">

Wenn jetzt regie_sende selbst ein return false; am Ende hat, kannst Du das sogar verkürzt notieren:

<a onclick="return regie_sende( 'text','#lied_01' )">

Damit sollte der "Seitenwechsel" nach dem Anklicken vermieden werden.

ABER: So solltest Du es wirklich nicht machen. Besser wäre es, Dein class=regie" dafür zu nutzen, einen passenden Eventhandler per JavaScript zu vergeben. Vielleicht kannst Du den Hash #lied_01 aus dem title-Attribut herauslösen, oder Du vergibst dem a-Element ein data-*-Attribut, in dem der Hash steht:

<a class="regie" data-sende="#lied_01">

Wenn die Seite fertig geladen hat, suchst Du per JavaScript einfach alle a-Elemente mit der Klasse "regie":

document.addEventListener("DOMContentLoaded", function () {

  // alle passenden Links finden
  var sender = document.querySelectorAll("a.regie");

  // alle gefundenen Links präparieren
  sender.forEach(function (a) {
    // dynamisches onclick vergeben
    a.addEventListener("click", function (event) {
      // Variable a ist hier bekannt (closure)
      return regie_sende("text", a.dataset.sende);
  });
});

Ich habe obigen Code natürlich nicht geprüft, aber Du wirst verstehen, was ich meine, um es im Fehlerfalle selbst korrigieren zu können.

Liebe Grüße,

Felix Riesterer.