小编典典

在ajax调用后,$(this)为何未定义

ajax

单击锚标签并将ID设置为href时,我正在执行ajax请求。顺便说一句,该锚标记是动态创建的。

<a href="983" class="commentDeleteLink">delete</a>

单击锚标记后,将执行以下代码:

    $('.commentDeleteLink').live('click', function(event) {
        event.preventDefault();
        var result = confirm('Proceed?');

        if ( result ) {
            $.ajax({
                url: window.config.AJAX_REQUEST,
                type: "POST",
                data: { action       : 'DELCOMMENT',
                        comment      : $('#commentText').val(),
                        comment_id   : $(this).attr('href') },
                success: function(result) {
                    alert($(this).attr('href'));
                    //$(this).fadeOut(slow);
                }
            });
        }
    });

当我尝试显示$(this).attr(’href’)时,它说它是“未定义的”。我真正想做的是fadeOut锚标记,但是当我调查$(this)的值时,它是“未定义”的。

上面的代码段可能有什么问题?


阅读 343

收藏
2020-07-26

共1个答案

小编典典

你应该试试

$('.commentDeleteLink').live('click', function(event) {
    event.preventDefault();
    var result = confirm('Proceed?');
    var that = this;
    if ( result ) {
        $.ajax({
            url: window.config.AJAX_REQUEST,
            type: "POST",
            data: { action       : 'DELCOMMENT',
                    comment      : $('#commentText').val(),
                    comment_id   : $(this).attr('href') },
            success: function(result) {
                alert($(that).attr('href'));
                //$(that).fadeOut(slow);
            }
        });
    }
});

因为this在回调中不是clicked元素,所以您应该缓存this一个that可以重复使用并且对上下文不敏感的变量

2020-07-26