2017-01-06 1 views
0

Ich benutze JQuery 1.12. Aus irgendeinem Grund ist ein Click-Handler zweimal gesetzt zu werden, obwohl ich das Click bin freibleibend, bevor es wieder einstellen ...Wie verhindere ich, dass mein Click-Handler zweimal gesetzt wird?

$styledSelect.unbind('click') 
    console.log("setting click") 
    $styledSelect.click(function(e) { 
    console.log("opened"); 
    e.stopPropagation(); 
    $('div.select-styled.active').each(function() { 
     $(this).removeClass('active').next('ul.select-options').hide(); 
    }); 
    $(this).toggleClass('active').next('ul.select-options').toggle(); 
    }); 

aber noch, wenn ich mein Menü klicken, um es zu öffnen, sehen Sie die „geöffnet“ Anweisung zweimal ausgedruckt. Siehe meine Geige - http://jsfiddle.net/6fjnnu55/1/. Weiß jemand, wie ich meinen Click-Handler richtig einstellen kann, damit ich ihn nicht zweimal setze?

+1

HOw ist das ein Duplikat? THat empfiehlt, "this.unbind (" click ")" hinzuzufügen, was bereits die erste Zeile im von mir geposteten Code-Snippet ist. – Dave

+0

Nein, es ist kein Duplikat. @Dave: fügen Sie 'console.log (e)' in Ihren Click-Handler ein - und sehen Sie, dass es tatsächlich verschiedene Ereignisse behandelt. Der letzte ist "natürlich" (vom Benutzer ausgelöst), alle anderen werden vom Skript selbst generiert. – raina77ow

+0

Ja, das ist keine Täuschung, sondern basiert * ausschließlich * auf dieser Frage und nicht mit der externen jsFiddle, die Seiten und Seiten Code enthält, von denen niemand erwartet werden sollte, es zu lesen, sieht es so aus. Sie müssen lernen, wie man ein [mcve] erstellt. – DavidG

Antwort

2

Die Frage scheint auf den Leitungen zu sein 35-36:

}).focus(function() { 
    $(this).find('.select-styled').click() 

Es scheint „auf Fokus“ Sie wählen Widget klicken ... Ich schätze, dass Sie entweder nicht wollen, auf den Fokus auf klicken die ganze Zeit oder vielleicht sogar überhaupt nicht ...

UPDATE

so bei der Veranstaltung an, als vorgeschlagen, dass ich glaube nicht wirklich helfen, weil Sie Fälle müssen unterscheiden, wo y ou haben eine Veranstaltung von denen, wo beide gefeuert werden ... Ich habe eine Flag-Variable für diese verwenden würde, meine aktualisierte Geige sehen, insbesondere Linien 30, 39 und 75

http://jsfiddle.net/6fjnnu55/3/

hoffe, das hilft!

+0

Genau. Der Grund dafür ist, dass das 'Klick'-native Ereignis nach' Fokus' ausgelöst wird - es sei denn, das Element wurde bereits fokussiert. – raina77ow

+0

Hallo @MacPrawn, danke für die Identifizierung. Tatsächlich möchte ich nur die "Klick" -Funktion aufrufen, wenn die Fokusfunktion aufgerufen wird, weil jemand auf die "Tab" -Taste geklickt hat, um das Element zu erreichen (im Gegensatz zu einem Klick mit dem Haus). Wie kann ich die beiden unterscheiden? – Dave

+0

Sie können dies entweder verzögern oder das Ereignis selbst innerhalb des Handlers überprüfen. Es gibt mehrere Unterscheidungen für die ausgelösten Ereignisse (isTriggered-Flag ist unter den bekanntesten gesetzt)). – raina77ow

Verwandte Themen