You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript类中如何让事件回调的$(this)指向DOM元素而非类实例

问题的核心原因是你在事件回调中使用了箭头函数,箭头函数没有独立的this绑定,会继承外层paginate_event方法的this指向(也就是Navigation类的实例),因此无法指向触发点击事件的DOM元素。

以下是两种可直接落地的解决方案:

方案1:通过事件对象获取触发元素(改动最小)

事件对象的currentTarget属性固定指向当前绑定事件的触发元素,直接替换原代码中的this即可,不需要调整回调函数的写法,类实例的this也可以正常使用:

paginate_event(selector_id = '.pagination a') {
  $(document).on('click', selector_id, (event) => {
    overlay(this.content);
    event.preventDefault();
    var params = window.location.search;
    // 替换this为event.currentTarget获取触发点击的a标签
    var page = $(event.currentTarget).attr('href').split('page=')[1];
    this.fetch_data(params,page);
  });
}

方案2:改用普通函数,提前缓存类实例指向

如果需要保留$(this)获取DOM元素的写法,可以将回调改为普通函数,同时提前在方法内层缓存类实例的this指向:

paginate_event(selector_id = '.pagination a') {
  // 提前缓存类实例的this指向
  const self = this;
  // 回调改用普通函数,普通函数的this会指向触发事件的DOM元素
  $(document).on('click', selector_id, function(event) {
    overlay(self.content);
    event.preventDefault();
    var params = window.location.search;
    var page = $(this).attr('href').split('page=')[1];
    self.fetch_data(params,page);
  });
}

内容的提问来源于stack exchange,提问作者Abner Gorostieta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:39:04