Nico R.: Funktioniert click() nur einmal?

Beitrag lesen

Hallo Rolf,

vielen Dank für deine Erklärungen.

  • An welcher Stelle ist dein button1.click() Aufruf? Wird der überhaupt ausgeführt? Ist button1 an dieser Stelle überhaupt definiert und mit einem Wert gefüllt?

Ja, alle Elemente existieren, die lasse ich mir ebenso in der Konsole anzeigen wie das event-Objekt.

Ich bin nicht sicher, ob ich alles komplett verstanden habe, aber ich habe die Variante mit dispatchEvent jetzt mal eingebaut. Damit funktionierts genauso wie mit click(), allerdings hab ich auch das gleiche Problem. Das ist vielleicht gar keins des Event-Handlings, sondern eins der Kapselung der Funktionen (???).

Nochmal kurz zusammengefasst, was offenbar passiert bzw. was ich will. Vielleicht kapier ichs dann auch besser. Ich hab in meinem "Hauptscript", das ich über src im <head> einbinde:

<html>	
    <script src="inc/main.js"></script>
</head>

Dort wir an die <th>s ein click-Event anhängt und dann die Tabelle über die Funktion sortTabelle() umsortiert:

var sortSpalten = tbl.querySelectorAll("[data-sortierung]");
for(i=0; i < sortSpalten.length; i++) {
    sortSpalten[i].addEventListener("click", sortTabelle);
}

Das funktioniert für alle Tabellen auf allen Seiten. Auf einer Seite hab ich nun ein weiteres Script, das spezielle Sachen macht. Unter anderem wird über einen "button" eine Funktion "funktion1" aufgerufen, in der zum Schluss automatisch auch die Tabelle umsortiert wird. Statt mit der Maus auf ein <th> zu klicken, löse ich das über eine id per click() aus.

<th id="th"></th>
button.addEventListener("click", funktion1);

function funktion1() {
    ...
    th.click();
}

Das funktioniert auch, solange ich direkt auf den button klicke. Der an th angebundene event-Handler sortiert dann die Tabelle um. Wenn ich allerdings button.click() anwende, wird sortTabelle() nicht mehr aufgerufen. das th-event wird aber abgefeuert, wenn ich das richtig sehe. Zumindest mit Rolfs dispatchEvent kommt hier ein true.

const newEvent = new PointerEvent("click", event);
var autosort = th.dispatchEvent(newEvent); 
console.log(autosort);

Die Funktion sortTabelle wird aber nicht aufgerufen... Vielleicht habt ihr ja Spaß dran, mitzutüfteln. Wenn nicht, auch nicht schlimm. Notfalls verzichte ich auf diese Komfortfunktion.

Eigentlich ists zum Erklären auch zu kompliziert. Ich werde mal beizeiten versuchen, das in codepen nachzubauen und mich dann nochmal melden.

Schöne Grüße

Nico