Nhận phần tử được nhấp bằng cách sử dụng jQuery trên sự kiện?


84

Tôi đang sử dụng mã sau để phát hiện khi nào một nút được tạo động được nhấp vào.

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

Thông thường, nếu bạn vừa làm, $('.appDetails').click()bạn có thể sử dụng $(this)để lấy phần tử được nhấp vào. Tôi sẽ thực hiện điều này như thế nào với đoạn mã trên?

Ví dụ:

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

Câu trả lời:


114

Đơn giản nhất có thể

Sử dụng luôn $(this)ở đây

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

Có vẻ như tôi đang gặp sự cố bộ nhớ đệm từ máy chủ. Lấy làm tiếc.
Devil's Advocate

53
Một cảnh báo cho những người sử dụng ES6. Các hàm mũi tên không đặt 'this' nên đây sẽ là giá trị chính. Vì vậy, về cơ bản không sử dụng hàm mũi tên ở đây.
thomas-peter

4
@ thomas-peter Tôi nói bạn biến điều đó thành câu trả lời
Jack

2
@ thomas-peter Đã cứu tôi thêm hàng chục phút bực bội, cảm ơn bạn.
Milan Velebit

1
@ thomas-peter bạn vừa cứu tôi với! Tôi đang cố gắng tìm ra lý do tại sao nó không hoạt động trong 30 phút ... Cảm ơn bạn!
kriskotoo BG

53

Bạn đang thiếu thông số sự kiện trên hàm của mình.

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

6
Điều này là hoàn hảo cho tôi. Nó cung cấp cho phần tử đã được nhấp - $ (this) chỉ cung cấp cho phần tử có sự kiện được đính kèm.
Bill Tarbell,

Đây là phương pháp hoàn hảo. Cảm ơn :)
Swetabja Hazra

34

Cách xử lý thông thường này không hoạt động tốt với ES6. Bạn có thể làm điều này thay thế:

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

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

Lưu ý rằng mục tiêu sự kiện sẽ là phần tử được nhấp, có thể không phải là phần tử bạn muốn (nó có thể là phần tử con đã nhận sự kiện). Để có được phần tử thực tế:

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

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

0

Một cách đơn giản là chuyển thuộc tính data vào thẻ HTML của bạn.

Thí dụ:

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.