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);
});
jquery
event-handling
click
jquery-events
Abogado del diablo
fuente
fuente
Falta el parámetro de evento en su función.
$(document).on("click",".appDetails", function (event) { alert(event.target.id); });
fuente
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')); });
fuente
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>
fuente