2016-08-14 2 views
0

Dieses Meteor Client-Vorlagenereignis wird mehrere Male ausgelöst, von 2 bis 23 mal, je nachdem, wo ich auf den Bildschirm klicke.
Warum und wie es zu beheben?Klicken Sie auf Ereignis wird mehrere Male ausgelöst

Template.myT.events({ 
     'click *:not(canvas)': function(e) { 
     console.log(e.target); 
     return; 
     }); 

hier ist die Ausgabe von der Konsole

enter image description here

Antwort

0

Sie den Klick-Listener Elemente auf alle Elemente mit Ausnahme von Leinwand registrieren. Wenn Sie auf ein <span> Element innerhalb eines <p> Elements klicken, klicken Sie nicht nur auf das Element <span>, sondern auch auf das Element <p>. Aus diesem Grund wird der Klick-Listener mehrmals aufgerufen (das Ereignis wird weitergegeben). Verwenden Sie in Ihrem Click-Handler e.stopPropagation(), um dieses Verhalten zu verhindern.

+0

Was passiert, wenn ein HTML-Element eines Vorfahren auf einen anderen Handler gesetzt wird? 'e.stopPropagation()' würde es stoppen, was wahrscheinlich nicht das ist, was Sie wollen. Eine bessere Antwort (imo) wäre, die Handler nicht auf so viele Elemente zu setzen. ''click *: not (canvas)'' ist nicht sehr spezifisch - Sie sollten wahrscheinlich ein 'id' oder' class' Attribut verwenden. –

+0

@DavidKnipe Der Code muss das Klickereignis außerhalb der Zeichenfläche erfassen. Wie empfehlen Sie, das Problem mit "id" oder "class" zu lösen? –

+0

@FredJ., Achten Sie auf das click-Ereignis om das body-Element und prüfen Sie, ob 'e.target == theCanvasElement'. –

Verwandte Themen