在事件上使用jQuery获取clicked元素?

Dev*_*ate 68 jquery click event-handling jquery-events

我正在使用以下代码来检测单击动态生成的按钮的时间.

$(document).on("click",".appDetails", function () {
    alert("test");
});
Run Code Online (Sandbox Code Playgroud)

通常情况下,如果你刚才这样做,$('.appDetails').click()你可以$(this)用来获取被点击的元素.我将如何使用上面的代码完成此操作?

例如:

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

bip*_*pen 82

尽可能简单

$(this)在这里使用

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

  • 向使用ES6的用户发出警告.箭头函数不设置'this',因此这将是父级.所以,这里基本上不使用箭头功能. (32认同)
  • @thomas-peter 为我节省了数十分钟的挫败感,谢谢。 (4认同)
  • @托马斯-彼得你刚刚救了我!我试图找出为什么它在 30 分钟内没有醒来......谢谢! (3认同)
  • @ thomas-peter我说你把它变成了答案 (2认同)

Bas*_*ang 39

您缺少函数的事件参数.

$(document).on("click",".appDetails", function (event) {
    alert(event.target.id);
});
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说很完美.它给出了被点击的元素 - $(this)只给出了附加事件的元素. (5认同)

waf*_*eau 25

传统的处理方式与ES6不相称.你可以这样做:

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

  this.delete(clickedElement.data('id'));
});
Run Code Online (Sandbox Code Playgroud)

请注意,事件目标将是单击的元素,可能不是您想要的元素(它可能是接收事件的子元素).要获得实际元素:

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

  this.delete(targetElement.data('id'));
});
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用 event.currentTarget 来获取事件绑定到的元素。`event.target` 确实是触发事件的元素。如果此类有多个嵌套元素,您的代码“clickedElement.closest('.delete');”可能会失败。 (6认同)