javascript - 选择元素时无法找到 data-id

标签 javascript jquery ecmascript-6

提前道歉,我觉得这是一个非常简单的解决方案,而且我正处于严重的大脑放屁之中。我只是想使用 ES6 语法获取我正在单击的项目的 data-id,但无论我以哪种方式运行它,我总是会遇到未定义的情况。

HTML

<ul>
    <li class="list-item" data-id="item-1">Click me</li>
    <li class="list-item" data-id="item-2">Click me</li>
    <li class="list-item" data-id="item-3">Click me</li>
</ul>

JS

let $el = $('ul');

class List {
    constructor($el) {
        this.$el = $el;

        this.$listItem = $el.find('li');

        this.attachHandlers();
    }

    attachHandlers() {
        this.$listItem.on('click', () => {
            var data = $(this).attr('data-id');
            console.log(data);
        });
    }
}

const _init = () => {
    if ($el.length) {
        $el.each((i, v) => {
            new List($(v));
        });
    }
};

_init();

我已经尽可能地简化了代码,有人看到我在这里做错了什么吗?

最佳答案

问题出在您的 attachHandlers 方法中。由于您使用的是箭头函数,因此 this 引用的是类,而不是单击的元素。

将箭头函数更改为常规函数。

关于javascript - 选择元素时无法找到 data-id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47504058/

相关文章:

javascript - 基于另一个 javascript 文件定义带参数的函数

javascript - 单击按钮复制 div 元素及其 CSS

javascript - 在其他函数中仅执行一次函数

javascript - jQuery 提交表单(带文件和文本),无需从当前窗口重定向

javascript - 我可以控制 ES6 中类的创建方式吗?

arguments - 在 JSDoc 中记录解构函数参数

javascript - 如何通过 ajax 加载样式表并在加载完成后进行回调

jquery - 如何让 div 框显示在屏幕内(不被截断)

javascript - 如何提醒动态添加的输入框的重复值?

javascript - CJS 和 ES6 模块之间的语法差异