Klicken Sie auf das Ereignisziel, um das Element oder dessen untergeordnetes, nicht übergeordnetes Element zu erhalten

Lesezeit: 2 Minuten

Ich habe dieses HTML-Element:

<div class="list-group">
    <a href="https://stackoverflow.com/questions/50149925/javascript:;" @click="showDetails(notification, $event)" class="list-group-item" v-for="notification in notifications" :key="notification.id">
        <h4 class="list-group-item-heading">{{ '{{ notification.title }}' }}</h4>
        <p class="list-group-item-text">{{ '{{ notification.created_at|moment }}' }}</p>
    </a>
</div>

Und dieses Javascript:

return new Vue({
    methods: {
        showDetails: function (notification, event) {
          this.notification = notification

          console.info(event.target)
        }
    }
}

Das Problem ist, dass event.target Gibt das genaue Element zurück, auf das ich klicke. Das heißt, es kann das sein a Element oder eines seiner untergeordneten Elemente (h4 oder p).

Wie bekomme ich die a Element (das Element mit der @click Handler), auch wenn der Benutzer auf eines seiner untergeordneten Elemente klickt?

  • Hast du versucht zu bestehen? this zu Ihrer Funktion showDetails? wie showDetails(notification, $event, this)Ihr drittes Argument sollte jetzt Ihr Anker sein

    – Kaddath

    3. Mai 2018 um 8:09

  • Haben Sie es versucht? this anstatt event.target?

    – D. Pardal

    3. Mai 2018 um 8:11 Uhr

  • NEIN, this gibt die Window-Instanz selbst zurück.

    – Stephan Vierkant

    3. Mai 2018 um 8:15 Uhr

verwenden event.currentTarget Dies zeigt auf das Element, das Sie dem Listener hinzugefügt haben. Es ändert sich nicht, wenn das Ereignis sprudelt

https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget

  • Beachten Sie, dass Sie hierfür nur das Objekt und nicht das Ereignis erhalten, als ob es für dieses Element wäre. So sind beispielsweise offsetX und offsetY immer noch relativ zum untergeordneten Element und nicht zu dem, für das Sie tatsächlich den Ereignis-Listener angehängt haben (ja, das ist sehr verwirrend).

    – Johncl

    7. August 2020 um 13:20 Uhr


Alternative Lösung mit CSS:

a * {
    pointer-events: none;
}

Das Element ist niemals das Ziel von Zeigerereignissen; Allerdings können Zeigerereignisse auf seine Nachkommenelemente abzielen, wenn für diese Nachkommen Zeigerereignisse auf einen anderen Wert gesetzt sind. Unter diesen Umständen lösen Zeigerereignisse während der Ereigniserfassungs-/Blasenphasen gegebenenfalls Ereignis-Listener für dieses übergeordnete Element auf ihrem Weg zum/vom Nachkommen aus.

Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events#Values

1451520cookie-checkKlicken Sie auf das Ereignisziel, um das Element oder dessen untergeordnetes, nicht übergeordnetes Element zu erhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy