¿Obtener el elemento seleccionado usando jQuery en el evento?


84

Estoy usando el siguiente código para detectar cuándo se hace clic en un botón generado dinámicamente.

$(document).on("click",".appDetails", function () {
    alert("test");
});

Normalmente, si lo hiciera $('.appDetails').click(), podría usar $(this)para obtener el elemento en el que se hizo clic. ¿Cómo podría lograr esto con el código anterior?

Por ejemplo:

$(document).on("click",".appDetails", function () {
    var clickedBtnID = ??????
    alert('you clicked on button #' + clickedBtnID);
});

Respuestas:


114

Tan simple como puede ser

Úselo $(this)aquí también

$(document).on("click",".appDetails", function () {
   var clickedBtnID = $(this).attr('id'); // or var clickedBtnID = this.id
   alert('you clicked on button #' + clickedBtnID);
});

Parece que estoy lidiando con un problema de almacenamiento en caché del servidor. Lo siento.
Abogado del diablo

53
Una advertencia para quienes usan ES6. Las funciones de flecha no establecen 'esto', por lo que será el padre. Entonces, básicamente no uses una función de flecha aquí.
thomas-peter

4
@ thomas-peter digo que conviertes eso en una respuesta
Jack

2
@ thomas-peter me ahorró más decenas de minutos de frustración, gracias.
Milán Velebit

1
@ thomas-peter, ¡me acabas de salvar! Estaba tratando de averiguar por qué no funcionaba durante unos 30 minutos ... ¡Gracias!
kriskotoo BG

53

Falta el parámetro de evento en su función.

$(document).on("click",".appDetails", function (event) {
    alert(event.target.id);
});

6
Esto fue perfecto para mí. Da el elemento en el que se hizo clic: $ (this) solo dio el elemento que tenía el evento adjunto.
Bill Tarbell

Este es el método perfecto. Gracias :)
Swetabja Hazra

34

La forma convencional de manejar esto no funciona bien con ES6. Puedes hacer esto en su lugar:

$('.delete').on('click', event => {
  const clickedElement = $(event.target);

  this.delete(clickedElement.data('id'));
});

Tenga en cuenta que el objetivo del evento será el elemento en el que se hizo clic, que puede no ser el elemento que desea (podría ser un niño que recibió el evento). Para obtener el elemento real:

$('.delete').on('click', event => {
  const clickedElement = $(event.target);
  const targetElement = clickedElement.closest('.delete');

  this.delete(targetElement.data('id'));
});

0

Una forma sencilla es pasar el atributo de datos a su etiqueta HTML.

Ejemplo:

<div data-id='tagid' class="clickElem"></div>

<script>
$(document).on("click",".appDetails", function () {
   var clickedBtnID = $(this).attr('data');
   alert('you clicked on button #' + clickedBtnID);
});
</script>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.