javascript - `this` 触发事件时属于窗口对象

标签 javascript jquery dom

<分区>

$("body").on('click', 'ul#ajax-users-list>li', () => {
    console.log( $(this).data('id') );
});

此代码返回 undefined,因为 $(this) = [Window]

如何访问触发点击事件的元素的数据属性?

最佳答案

问题是因为您使用的是箭头函数,因此处理函数的范围将保留在定义级别。如果您使用传统的匿名函数,逻辑将正常工作:

$("body").on('click', 'ul#ajax-users-list>li', function() {
  console.log($(this).data('id'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="ajax-users-list">
  <li data-id="foo">click me</li>
</ul>

如果您更喜欢使用箭头函数,那么您需要从提供的 event 参数而不是 this 引用中获取引发事件的元素:

$("body").on('click', 'ul#ajax-users-list>li', (e) => {
  console.log($(e.target).data('id'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="ajax-users-list">
  <li data-id="foo">click me</li>
</ul>

关于javascript - `this` 触发事件时属于窗口对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090031/

相关文章:

javascript - JS 对抗缓存页面

dom - Chrome 扩展程序可在用户单击浏览器按钮时更改 DOM

javascript - 使用 if/else if 函数根据选择中选择的选项执行不同的操作

jquery - 暂停后播放音频元素在 jquery 中不起作用

javascript - 如何从外部文件运行函数作为表单的 Action ?

javascript - 更改 Class 为 X 的元素的 ID

javascript - 将 javascript 函数分配给 dom 元素

javascript - @Input 和 @Output 在 Angular-Cli 中始终未定义

javascript - 下划线绑定(bind)在 IE8 中不起作用

Javascript/Jquery Excel 文件名