javascript - 使用事件委托(delegate)时获取当前冒泡阶段的目标

标签 javascript jquery jquery-events event-delegation

我有一个包含一些按钮的 div,我想将一个事件监听器附加到该 div,以监听从其内部按钮冒出的事件。

我遇到的问题是 event.currentTarget 的值似乎与 docs 的值不匹配。说应该。

考虑以下代码:

$('.container').on('click', '.myButton', function(event) {
  console.log("event.currentTarget:");
  console.log(event.currentTarget);

  console.log("event.target: ");
  console.log(event.target);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="container">
  <button class="myButton">Click Me</button>
</div>

我正在使用jquery 1.8.3

event.currentTarget 应该是容器 div,但它被设置为其中的按钮。

我该如何解决这个问题。这是一个已知的错误还是我做错了什么?

最佳答案

我认为它正在按预期工作。

在上述情况下,事件直接附加到按钮,因此 currentTarget 和 target 将始终相同。

$('.container').on('click', '.myButton', function(event) {}); does not mean that the event is attached to the div. It is just delegating the event. Meaning, the event will bubble up only till .container and the event is still attached ONLY to .myButton

情况 1: 如果事件附加到 div

  1. 如果单击按钮,则 currentTarget 将是按钮,目标将是 div。
  2. 如果单击 div,currentTarget 将为 div,target 也将为 div

示例

$('.container').on('click', function(event) {
  console.log(event.currentTarget);
  console.log(event.target);
});
div{
  border: 1px solid;
  width: 150px;
  height: 150px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="container">
  <button class="myButton">Click Me</button>
  Click me
</div>

情况 2:(您的情况)如果事件附加到按钮,则 currentTarget 和 target 将始终是按钮

$('.container').on('click','.myButton', function(event) {
  console.log(event.currentTarget);
  console.log(event.target);
});
div{
  border: 1px solid;
  width: 150px;
  height: 150px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="container">
  <button class="myButton">Click Me</button>
  Click me
</div>

关于javascript - 使用事件委托(delegate)时获取当前冒泡阶段的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30356261/

相关文章:

javascript - jQuery iPhone 风格复选框事件

javascript - 通过 JavaScript 更改 img src

jquery - 当您在 jquery 中使用 element.hide() 时,高度和宽度是否设置为 0?

javascript - 在 JavaScript/jQuery 中使用 Canvas 显示图像

jquery - 特定元素识别中删除元素

javascript - 以 top->down left->right 方式定位元素

javascript - 在html表格中显示json数组

jquery - 在新创建的元素上应用 jQuery 文件样式插件设置

php - 如何在刷新时更改全屏背景?

javascript - 无法用jquery手动触发keydown事件