Rolf B: Danke

Beitrag lesen

problematische Seite

Hallo Linuchs,

die Propagation verläuft sequenziell. Javascript verarbeitet nichts parallel (von Worker-Threads abgesehen, aber die verarbeiten keine GUI Events).

Das bedeutet: Wenn auf einem Element ein Event feuert – sei es durch direktes Auslösen oder dadurch, dass es dorthin geblubbert ist –, werden die auf diesem Element für dieses Event registrierten Handler nacheinander ausgeführt. Jeder Handler wird vollständig ausgeführt, bevor der nächste beginnt.

Heißt also: es ist unerheblich, wo im Handler du stopPropagation oder preventDefault aufrufst. Beides, Propagation und Defaultverarbeitung, finden erst statt, nachdem deine Handlerfunktion zurückgekehrt ist.

Ausnahme: Deine Handlerfunktion löst asynchrone Vorgänge aus (setTimeout oder Promises). Die asynchronen Schritte werden, wenn sie bereit zur Ausführung sind, in die Mikrotask-Queue gestellt und die wird erst abgearbeitet, wenn das aktuelle Event vollständig verarbeitet ist.

Dein getHelptextXY ist asynchron; ich meine, ich hätte da Ajax in Erinnerung. Das bedeutet aber auch, dass in getHelptextXY nur der Ajax-Request angetriggert wird. Danach kehrt die Funktion zurück und stopPropagation wird aufgerufen. Du dürftest stopPropagation nicht in dem Eventhandler aufrufen, der die Ajax-Antwort entgegennimmt - DAS würde die Propagation des click-Events nicht verhindern können.

Wenn das bei Dir nicht so ist, muss ich mir das nochmal auf deiner Seite live und in leuchtenden Farben anschauen.

Rolf

--
sumpsi - posui - obstruxi