javascript - 为什么 event.target 给出多个结果?

标签 javascript jquery console.log

我有一张 3*3 的 table 。当我单击控制台日志中的 td 元素时,td 会打印六次,而我希望它只打印一次。为什么会发生这种情况以及如何预防?

JS:

$("*").click(function(event){
  console.log(event.target);//is this here executing 6 times, why...
});

HTML:

<table>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
</table>

最佳答案

发生这种情况是由于传播。由于您使用了$('*'),因此它会将点击处理程序单独附加到每个元素。因此,当您单击 td 时,事件冒泡到父元素处理程序。

要查看差异,请尝试

$("td").click(function(event){
  console.log(event.target);//will only log once since it was only attached to td
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<table>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
</table>

停止传播

$("*").click(function(event){
  event.stopPropagation();
  console.log(event.target);//will only log once since propagation was stopped above
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<table>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
    <tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
    </tr>
</table>

关于javascript - 为什么 event.target 给出多个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898152/

相关文章:

javascript - 某些 Bootstrap 类不工作(Bootstrap 4、Navbar 和 bg-)

jquery - 手机间隙 : Cannot multiple SQL request in same page

javascript - 如何在函数内部为 jquery 工具提示调用不同的 var 字符串

javascript - 使用 jquery 变量设置背景图像(线性渐变)

javascript - for循环打印出多个具有相似名称的数组

javascript - 如何删除/覆盖标记为 !important 的元素属性的 CSS

javascript - 从 json 数据创建基于 div 的树布局

javascript 数组原型(prototype) - 添加了新方法 - 奇怪的 console.log

javascript - 按数据属性排序

javascript - 无需 F12 工具即可在 Internet Explorer 上恢复 javascript 日志和错误