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

为何无法在AJAX加载的内容中使用jQuery的$(this)选择器?

为什么AJAX加载的内容里用jQuery的$(this)会失效?

嘿,这个问题我太熟了!咱们一步步拆解你的问题,看看问题出在哪,怎么解决:

核心问题有两个

1. 动态元素的事件绑定时机不对

你现在是直接给$('.commentReplyLink')绑定click事件,但这些元素是通过AJAX的load()方法动态加载进来的——在你执行绑定代码的时候,这些元素还没被插入到DOM里呢!所以绑定的事件根本没挂到目标元素上,自然触发不了,更别说用$(this)了。

2. 箭头函数改变了this的指向

你写的commentsReplyLink.click((e)=>{...})用了箭头函数,箭头函数的this不会指向触发事件的DOM元素,而是继承自它外层的作用域(这里就是load()的回调函数作用域)。所以哪怕事件能触发,$(this)也不是你想要的那个点击的回复链接。

正确的解决方法

咱们针对这两个问题来改代码:

第一步:用事件委托绑定动态元素

把事件绑定到已经存在的父元素上(比如你的.commentsDiv,或者更上层的document),利用事件冒泡的特性来捕获动态元素的事件。这样不管元素什么时候加载进来,事件都能被触发。

第二步:改用普通函数保留this指向

把箭头函数换成普通的function(e){...},这样事件触发时,this就会指向当前点击的那个.commentReplyLink元素,$(this)就能正常工作了。

修改后的代码示例

$('.commentsDiv').css({'opacity': '0'});
var loadTheComments = $('.commentsDiv').load($homeUrl+'trailer-comments/'+$trailerID,function(){
    $('.targetDiv').hide();
    $('.showSingle').click(function(e){
        e.preventDefault();
        $('#div'+$(this).attr('target')).slideToggle();
    });
    
    // 这里改成事件委托+普通函数
    $('.commentsDiv').on('click', '.commentReplyLink', function(e){
        e.preventDefault();
        // 现在$(this)就是你点击的那个回复链接了!
        console.log($(this));
        // 你的其他逻辑...比如遍历或者操作当前元素
        $('.commentReplyLink').each(function(){
            // 这里如果需要的话,$(this)也能正常指向每个.commentReplyLink元素
        });
    });
});

额外说明

  • 事件委托的父元素尽量选离目标元素近的静态元素(比如这里的.commentsDiv),比绑定到document性能更好。
  • 如果你一定要用箭头函数,那可以通过e.currentTarget来获取触发事件的元素,代替this——也就是$(e.currentTarget),效果和$(this)一样,但一般还是推荐用普通函数更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:58:51