Zostaniesz kliknięty element za pomocą jQuery na wydarzeniu?


85

Używam następującego kodu, aby wykryć kliknięcie przycisku generowanego dynamicznie.

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

Zwykle, jeśli właśnie to zrobiłeś, $('.appDetails').click()możesz użyć $(this)do pobrania klikniętego elementu. Jak mógłbym to osiągnąć za pomocą powyższego kodu?

Na przykład:

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

Odpowiedzi:


115

Tak proste, jak to tylko możliwe

Użyj $(this)również tutaj

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

1
Wygląda na to, że mam do czynienia z problemem buforowania na serwerze. Przepraszam.
Devil's Advocate

55
Ostrzeżenie dla osób używających ES6. Funkcje strzałkowe nie ustawiają „tego”, więc będzie to element nadrzędny. Więc zasadniczo nie używaj tutaj funkcji strzałkowej.
thomas-peter

4
@ thomas-peter Mówię, że zamieniasz to w odpowiedź
Jack

2
@ thomas-peter zaoszczędził mi dziesiątki minut frustracji, dziękuję.
Mediolan Velebit

1
@ thomas-peter właśnie mnie uratowałeś! Próbowałem dowiedzieć się, dlaczego nie budził się przez jakieś 30 minut ... Dziękuję!
kriskotoo BG

54

W funkcji brakuje parametru zdarzenia.

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

6
To było dla mnie idealne. Daje element, który został kliknięty - $ (this) dał tylko element, do którego zostało dołączone zdarzenie.
Bill Tarbell

To jest doskonała metoda. Dzięki :)
Swetabja Hazra

34

Konwencjonalny sposób radzenia sobie z tym nie sprawdza się w ES6. Możesz to zrobić zamiast tego:

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

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

Zwróć uwagę, że celem zdarzenia będzie kliknięty element, który może nie być żądanym elementem (może to być element podrzędny, który odebrał zdarzenie). Aby uzyskać rzeczywisty element:

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

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

0

Prostym sposobem jest przekazanie atrybutu danych do tagu HTML.

Przykład:

<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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.