El objetivo del evento de clic proporciona un elemento o es un elemento secundario, no un elemento principal

2 minutos de lectura

Tengo este elemento HTML:

<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>

Y este JavaScript:

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

          console.info(event.target)
        }
    }
}

El problema es ese event.target devolver el elemento exacto en el que hago clic. Eso significa que puede ser el a elemento, o uno de sus hijos (h4 o p).

¿Cómo obtengo el a elemento (el elemento con el @click controlador), incluso si el usuario hace clic en uno de sus hijos?

  • has intentado pasar this a tu funcion showDetails? como showDetails(notification, $event, this)tu tercer argumento debería ser tu ancla ahora

    – Kadad

    3 de mayo de 2018 a las 8:09

  • ¿Has probado a usar this en lugar de event.target?

    – D. Pardal

    3 de mayo de 2018 a las 8:11

  • No, this devolverá la propia instancia de Windows.

    – Stephan Vierkant

    3 de mayo de 2018 a las 8:15

usar event.currentTarget que apunta al elemento que adjuntó al oyente. No cambia a medida que el evento burbujea.

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

  • Tenga en cuenta que solo obtiene el objeto, no el evento, como si fuera para ese elemento para esto. Entonces, por ejemplo, offsetX y offsetY todavía son relativos al elemento secundario y no al que realmente adjuntó el detector de eventos (sí, es muy confuso).

    – Johncl

    7 de agosto de 2020 a las 13:20


Solución alternativa con CSS:

a * {
    pointer-events: none;
}

El elemento nunca es el destino de los eventos de puntero; sin embargo, los eventos de puntero pueden apuntar a sus elementos descendientes si esos descendientes tienen eventos de puntero establecidos en algún otro valor. En estas circunstancias, los eventos de puntero activarán detectores de eventos en este elemento principal según corresponda en su camino hacia/desde el descendiente durante las fases de captura/burbuja de eventos.

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

¿Ha sido útil esta solución?