Wie kann ich einen Klick außerhalb meines Elements erkennen? Ich verwende Vue.js, damit es außerhalb meines Vorlagenelements liegt. Ich weiß, wie es in Vanilla JS gemacht wird, aber ich bin mir nicht sicher, ob es einen angemesseneren Weg gibt, wenn ich Vue.js benutze?
Dies ist die Lösung für Vanilla JS: Javascript Detect Click-Ereignis außerhalb von div
Ich denke, ich kann einen besseren Weg verwenden, um auf das Element zuzugreifen.
javascript
vue.js
Gemeinschaft
quelle
quelle
Antworten:
Kann durch einmaliges Einrichten einer benutzerdefinierten Direktive gelöst werden:
Verwendung:
In der Komponente:
Arbeitsdemo zu JSFiddle mit zusätzlichen Informationen zu Vorbehalten:
https://jsfiddle.net/Linusborg/yzm8t8jq/
quelle
Es gibt die Lösung, die ich verwendet habe, die auf der Antwort von Linus Borg basiert und mit vue.js 2.0 gut funktioniert.
Sie binden daran mit
v-click-outside
:Hier ist eine kleine Demo
Sie können einige weitere Informationen über benutzerdefinierte Richtlinien finden und was el, Bindung, V - Knoten Mittel in https://vuejs.org/v2/guide/custom-directive.html#Directive-Hook-Arguments
quelle
Fügen Sie
tabindex
Ihrer Komponente ein Attribut hinzu, damit sie fokussiert werden kann, und führen Sie folgende Schritte aus:quelle
outline: none;
Fokus für das Element hinzugefügt .Für diese Aufgabe stehen in der Community zwei Pakete zur Verfügung (beide werden verwaltet):
quelle
vue-clickaway
Paket löste mein Problem perfekt. Vielen DankDies funktionierte bei mir mit Vue.js 2.5.2:
quelle
quelle
Ich habe alle Antworten kombiniert (einschließlich einer Zeile von vue-clickaway) und eine Lösung gefunden, die für mich funktioniert:
Verwendung in der Komponente:
quelle
Ich habe die Antwort von MadisonTrash aktualisiert, um Mobile Safari zu unterstützen (die kein
click
Ereignis hattouchend
und stattdessen verwendet werden muss). Dies beinhaltet auch eine Überprüfung, damit das Ereignis nicht durch Ziehen auf Mobilgeräten ausgelöst wird.quelle
Ich benutze diesen Code:
Schaltfläche zum Ausblenden
show-hide-Element
Skript
Update: Uhr entfernen; Stop Propagation hinzufügen
quelle
Ich hasse zusätzliche Funktionen, also ... hier ist eine großartige Vue-Lösung ohne zusätzliche Vue-Methoden, nur var
quelle
Wenn Sie speziell nach einem Klick außerhalb des Elements suchen, aber immer noch innerhalb des übergeordneten Elements, können Sie verwenden
Ich benutze dies für Modalitäten.
quelle
Sie können zwei Ereignis-Listener für ein solches Klickereignis registrieren
quelle
quelle
Es gibt bereits viele Antworten auf diese Frage, und die meisten basieren auf der ähnlichen Idee einer benutzerdefinierten Richtlinie. Das Problem bei diesem Ansatz ist, dass man eine Methodenfunktion an die Direktive übergeben muss und nicht wie bei anderen Ereignissen direkt Code schreiben kann.
Ich habe ein neues Paket erstellt
vue-on-clickout
, das anders ist. Schau es dir an unter:Es erlaubt einem,
v-on:clickout
wie jedes andere Ereignis zu schreiben . Zum Beispiel können Sie schreibenund es funktioniert.
quelle
Die kurze Antwort: Dies sollte mit benutzerdefinierten Richtlinien erfolgen .
Es gibt hier viele großartige Antworten, die dies auch sagen, aber die meisten Antworten, die ich gesehen habe, brechen zusammen, wenn Sie anfangen, Außenklicks ausgiebig zu verwenden (insbesondere geschichtet oder mit mehreren Ausschlüssen). Ich habe einen Artikel geschrieben auf Medium geschrieben, in dem es um die Nuancen von Zollrichtlinien und die spezifische Umsetzung dieser Richtlinie geht. Es deckt möglicherweise nicht alle Randfälle ab, aber es hat alles abgedeckt, was ich mir ausgedacht habe.
Dies berücksichtigt mehrere Bindungen, mehrere Ebenen anderer Elementausschlüsse und ermöglicht Ihrem Handler, nur die "Geschäftslogik" zu verwalten.
Hier ist der Code für mindestens den Definitionsteil. Weitere Informationen finden Sie im Artikel.
quelle
Ich habe es etwas anders gemacht, indem ich eine Funktion in created () verwendet habe.
Auf diese Weise wird in meinem Fall das mobile Navigationssystem ausgeblendet, wenn jemand außerhalb des Elements klickt.
Hoffe das hilft!
quelle
Nur wenn jemand sucht, wie man Modal versteckt, wenn man außerhalb des Modals klickt. Da Modal normalerweise einen Wrapper mit der Klasse
modal-wrap
oder einem von Ihnen benannten@click="closeModal"
Wrapper hat, können Sie den Wrapper anlegen . Mit Ereignisbehandlung in vuejs Dokumentation erwähnt, können Sie überprüfen , ob das klickten Ziel entweder auf der Verpackung oder auf der Modal ist.quelle
@ Denis Danilenko-Lösungen funktionieren für mich wie folgt: Übrigens, ich verwende VueJS CLI3 und NuxtJS hier und mit Bootstrap4, aber es funktioniert auch auf VueJS ohne NuxtJS:
quelle
Sie können ein benutzerdefiniertes natives Javascript-Ereignis aus einer Direktive ausgeben. Erstellen Sie mit node.dispatchEvent eine Anweisung, die ein Ereignis vom Knoten auslöst
Welches kann so verwendet werden
quelle
Ich erstelle so ein Div am Ende des Körpers:
Wo .outside ist:
Und away () ist eine Methode in der Vue-Instanz:
Einfach, funktioniert gut.
quelle
Wenn Sie eine Komponente mit mehreren Elementen innerhalb des Stammelements haben, können Sie diese Lösung verwenden. Es funktioniert nur ™ mit einem Booleschen Wert.
quelle
Verwenden Sie dieses Paket Vue-Click-Outside
Es ist einfach und zuverlässig und wird derzeit von vielen anderen Paketen verwendet. Sie können die Größe Ihres Javascript-Bundles auch reduzieren, indem Sie das Paket nur in den erforderlichen Komponenten aufrufen (siehe Beispiel unten).
npm install vue-click-outside
Verwendung :
quelle
Erfinden Sie das Rad nicht neu, verwenden Sie dieses Paket mit V-Click-Outside
quelle
Sie können eine neue Komponente erstellen, die das Klicken von außen verarbeitet
Und verwenden Sie diese Komponente:
quelle
Häufig möchten Benutzer wissen, ob Benutzer die Root-Komponente verlassen (funktioniert mit allen Level-Komponenten).
quelle
Ich habe eine Lösung für die Handhabung des Umschalt-Dropdown-Menüs:
quelle
Ich verwende dieses Paket: https://www.npmjs.com/package/vue-click-outside
Es funktioniert gut für mich
HTML:
Meine Skriptcodes:
quelle