Ergebnis 1 bis 10 von 10
Like Tree2Likes
  • 1 Post By tsseh
  • 1 Post By tsseh

Thema: zusätzliches click-event registrieren

  1. #1
    chapolote ist offline Jungspund
    registriert
    24-08-2010
    Beiträge
    15

    zusätzliches click-event registrieren

    Auf einer Wordpress-Seite wird ein DOM-Element durch ein Plugin generiert, daß bei click ein Overlay öffnet.

    Ich möchte diesem Element ein weiteres click-Event verpassen, d.h. bei Click soll das Overlay weiterhin öffnen und zusätzlich meine eigene Funktion auslösen. Dabei möchte ich den Code des Plugins, welches den Button und das erste Click-Event generiert, unangetastet lassen.

    Ich habe folgenden Code probiert, aber irgendwie wird mein Event nicht ausgeführt, es wird lediglich das Overlay geöffnet. Meine eigene Funktion ist sauber programmiert, binde ich sie an ein anderes DOM-Element wird sie anstandslos ausgeführt.

    HTML-Code:
    jQuery(window).load(function(){
       jQuery('.element').click(function() {
         ...tue etwas
       }
    });
    Sollte das prinzipiell funktionieren oder muss ich hier ganz anders vorgehen, wenn schon ein click-event registriert ist?

    Gruß, chapolote
    Geändert von chapolote (05-02-2018 um 09:18 Uhr) Grund: Code Tags geändert

  2. #2
    Avatar von mikdoe
    mikdoe ist gerade online Administrator
    registriert
    01-05-2010
    Beiträge
    7.569

    AW: zusätzliches click-event registrieren

    Hast du es auch mit .addEventListener() versucht?
    Ich bin nicht sicher, ob .click() hinzufügt oder überschreibt obwohl es laut https://stackoverflow.com/a/5183628 ergänzen sollte.
    Woran machst du fest, dass der Event nicht ausgeführt wird?
    Das deutsche Javascript Forum http://forum.jswelt.de http://forum.jswelt.de/images/logoJsWeltForumV4_32x22.png
    Sorry wenn ich manchmal ohne Hallo und nur klein schreibe! Dann bin ich nicht unfreundlich sondern mit nervigem kleinem Touch Tablet zugange

  3. #3
    chapolote ist offline Jungspund
    registriert
    24-08-2010
    Beiträge
    15

    AW: zusätzliches click-event registrieren

    Weil er nicht ausgeführt wird. Habe es mit addEventListener probiert, warf mir aber einen Fehler in der Console aus, addEventListener sei nicht definiert. Komisch. Bin den ganzen Tag unterwegs, werde heute Abend nochmal schauen....

  4. #4
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.619

    AW: zusätzliches click-event registrieren

    Zitat Zitat von chapolote Beitrag anzeigen
    Sollte das prinzipiell funktionieren oder muss ich hier ganz anders vorgehen, wenn schon ein click-event registriert ist?
    dazu müsste man wissen, was der eventhandler macht.
    da es bei dir nicht geht, wird er wohl stopImmediatePropagation() aufrufen,
    dann kannst du dich nur noch davorhängen, etweder gleich in der event capturing phase, oder in der bubbling phase auf ein element welches vorher kommt (wenn es so eins gibt)

    edit:
    ist das eigentlich wieder mal so saudoof spezifiziert oder nur so umgesetzt? da es alle browser so machen, vermute ich "saudoof spezifiziert".

    die eventhandler in der capturing phase werden nach denen in der bubbling phase aufgerufen, wenn sie später hinzugefügt wurden, es wird also rein nach der aufrufreihenfolge von addEventListener gegangen, unabhängig von der phase!!!
    was soll der mist denn?

    du musst also den eventhandler in der capturing phase auf ein element hängen welches im dom vor deinem eigentlichen element kommt - oder gleich document - (und dann wie bei event delegation dein target prüfen)
    Geändert von tsseh (05-02-2018 um 12:51 Uhr)
    mikdoe likes this.

  5. #5
    Avatar von mikdoe
    mikdoe ist gerade online Administrator
    registriert
    01-05-2010
    Beiträge
    7.569

    AW: zusätzliches click-event registrieren

    @hesst: es gibt nur eins auf das man sich verlassen kann....
    Das deutsche Javascript Forum http://forum.jswelt.de http://forum.jswelt.de/images/logoJsWeltForumV4_32x22.png
    Sorry wenn ich manchmal ohne Hallo und nur klein schreibe! Dann bin ich nicht unfreundlich sondern mit nervigem kleinem Touch Tablet zugange

  6. #6
    chapolote ist offline Jungspund
    registriert
    24-08-2010
    Beiträge
    15

    AW: zusätzliches click-event registrieren

    Ich hab das schon probiert, mein Event einem Elternelement zu verpassen. Ebenfalls erfolglos. Mal sehen, ob ich heute Abend weiter komme....

    - - - Aktualisiert - - -

    Also, hab es mir nochmal angeschaut:

    jQuery('.elem').addEventListener('click',function(){...}); gibt einen Fehler, da jQuery und addEventListener zusammen nicht funktionieren.

    jQuery('elem').on('click',function(){...}); funktioniert zwar bei anderen Elementen im DOM, aber nicht bei meinem Element. Der Code wird nicht ausgeführt, es öffnet sich lediglich das Popup. Selbst wenn ich das oberste Elternelement anspreche, das für die Funktion noch Sinn macht, ändert das nichts.

    Probiert habe ich auch noch document.getElementsByClassName('elem').addEventListener('click',function(){...}); Auch hier gibt die Console einen Fehler aus, addEventListener is not a function. Das verstehe ich wiederum gar nicht, sollte doch eigentlich die richtige Syntax sein.

    Ich bin jetzt mit meinem (relativ dürftigen) Javascript-Latein am Ende. Wenn jemand dazu bereit wäre, sich das Ganze mal live anzuschauen, könnte ich ihm den Link zur Seite bereitstellen.

    Gruß, chapolote
    Geändert von chapolote (05-02-2018 um 14:40 Uhr)

  7. #7
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.619

    AW: zusätzliches click-event registrieren

    Zitat Zitat von chapolote Beitrag anzeigen
    jQuery('.elem').addEventListener('click',function(){...}); gibt einen Fehler, da jQuery und addEventListener zusammen nicht funktionieren.
    doch, aber jQuery('.elem') gibt ein jquery objekt zurück. jQuery('.elem')[0] das 1. element welches der selector matcht

    Zitat Zitat von chapolote Beitrag anzeigen
    jQuery('elem').on('click',function(){...}); funktioniert zwar bei anderen Elementen im DOM, aber nicht bei meinem Element. Der Code wird nicht ausgeführt, es öffnet sich lediglich das Popup. Selbst wenn ich das oberste Elternelement anspreche, das für die Funktion noch Sinn macht, ändert das nichts.
    weil du das event in die capturing phase einhängen musst, da geht nicht mit jquery

    Zitat Zitat von chapolote Beitrag anzeigen
    Probiert habe ich auch noch document.getElementsByClassName('elem').addEventListener('click',function(){...}); Auch hier gibt die Console einen Fehler aus, addEventListener is not a function. Das verstehe ich wiederum gar nicht, sollte doch eigentlich die richtige Syntax sein.
    weil getElementsByClassName eine collection liefert, das 1. element bekommt man wieder mit document.getElementsByClassName('elem')[0]

  8. #8
    chapolote ist offline Jungspund
    registriert
    24-08-2010
    Beiträge
    15

    AW: zusätzliches click-event registrieren

    @tsseh
    1000 Dank für die kleine Lektion. Ich weiß das sehr zu schätzen, das findet man in einschlägigen Foren so nicht unbedingt. Nicht nur zu sagen, daß etwas so nicht geht sondern auch warum. 1. Klasse!!!

    Bin schon wieder unterwegs, werde dann mal versuchen herauszufinden, was genau es mit diesem „Einhängen in die Capturing-Phase“ auf sich hat. Mal sehen, was mir Google dazu so liefert....

    Schönen Tag wünsche ich Dir

    - - - Aktualisiert - - -

    Doch noch kurz Zeit gefunden, und jaaaaaa, es läuft!!!! Danke nochmals für die Hinweise an alle und sehr speziell an tsseh!

    document.getElementsByClassName('elem')[0].addEventListener('click',function(){...},true)

    ist die magische Zeile!

    Sehr schön, wieder was gelernt :-))))

    Grüße an alle!

  9. #9
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.619

    AW: zusätzliches click-event registrieren

    Zitat Zitat von chapolote Beitrag anzeigen
    document.getElementsByClassName('elem')[0].addEventListener('click',function(){...},true)
    1) das funktioniert aber nur für das 1. element mit klasse elem, keine ahnung ob es mehrere gibt.
    2) ich vermute mal, dass das element mit klasse elem auch das mit dem anderen click-event ist. wenn ja, dann funktioniert das auch nur, wenn an jeder stelle, auf die geklickt wird ein child element liegt
    Code:
    <!DOCTYPE html>
    <html>
      <head>
        <title></title>
        <script>
          document.addEventListener("DOMContentLoaded", function()
          {
            var x1 = document.getElementById("x1");
            x1.addEventListener("click", function (e)
            {
              console.log("click auf x1");
              e.stopImmediatePropagation();
            });
            x1.addEventListener("click", function (e)
            {
              console.log("click auf x1 in der bubbling phase nach stopPropagation wird nichtmehr ausgeführt");
            });
            document.body.addEventListener("click", function (e)
            {
              if (e.target == x1)
              {
                console.log("click auf x1 in der capturing phase am body wird ausgeführt");
              }
            }, true);
            x1.addEventListener("click", function ()
            {
              console.log("click auf x1 in der capturing phase wird ausgeführt");
            }, true);
            var x0 = document.getElementById("x1").firstChild;
            x0.addEventListener("click", function (e)
            {
              console.log("click auf x0 in der bubbling phase wird ausgeführt");
            });
          });
        </script>
      </head>
      <body>
          <div id="x1"><div id="x0">hier geht es</div> hier nur über ein parent objekt</div>
      </body>
    </html>
    mikdoe likes this.

  10. #10
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.612

    AW: zusätzliches click-event registrieren

    Hm... bubbling und capturing sind ja eigentlich auf der Target-Node gar nicht definiert. Du befindest dich ja weder in dem einen noch in dem anderen. Du hast ja eigentlich drei Phasen: capturing, dann die Events auf der Node selbst und dann bubbling.

    Aber ich verstehe deinen Punkt. Ich verstehe aber auch, warum das so umgesetzt wurde.

Ähnliche Themen

  1. Antworten: 25
    Letzter Beitrag: 22-07-2014, 19:24
  2. [GELÖST] Event registrieren in einer Schleife - zum Anfang der Methode springen?
    Von kleimscheim im Forum JavaScript
    Antworten: 14
    Letzter Beitrag: 12-06-2014, 13:47
  3. Browser zu schnell für Click Event
    Von Yufiel im Forum JavaScript
    Antworten: 15
    Letzter Beitrag: 29-04-2011, 23:37
  4. Mausrad-Click Event abfangen
    Von TM4rkuS im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 12-03-2011, 22:05
  5. Click Event per software ausführen
    Von taikahn im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 01-07-2009, 18:02

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •