使用$(this).addClass在AJAX成功中不起作用

时间:2016-03-21 08:46:35

标签: jquery ajax

我正在对点击事件进行一些ajax处理工作正常但现在我想在成功函数上添加class我正在使用$(this).addClass("cover");但没有发生任何事情。如果我使用类似$('.dz-cover').addClass("cover");的方法来定位类添加类的意思,它可以正常工作,但它添加类所有带有类名'.dz-cover'的链接标记我不想要我只是想要仅添加我正在点击的链接的类。我的代码在

之下
$("#dropzonePreview").on("click", "a.dz-cover", function () {
    var id = $(this).data('id');
    $.ajax({
        type: 'POST',
        url: 'attachment/cover',
        data: {id: id},
        dataType: 'html',
        success: function (data) {
            $(this).addClass("cover");                   
        }
    });
});

3 个答案:

答案 0 :(得分:3)

这是因为在ajax调用中丢失了元素a.dz-cover的上下文,您可以使用选项上下文在ajax调用中设置上下文:

$("#dropzonePreview").on("click", "a.dz-cover", function () {

var id = $(this).data('id');
$.ajax({
    type: 'POST',
    url: 'attachment/cover',
    context:this,
    data: {id: id},
    dataType: 'html',
    success: function (data) {
        $(this).addClass("cover");

    }
  });
});

答案 1 :(得分:2)

this在这种情况下不起作用,因为success是另一个块。

$("#dropzonePreview").on("click", "a.dz-cover", function () {
    var elm = $(this);
    var id = elm.data('id');
    $.ajax({
        type: 'POST',
        url: 'attachment/cover',
        data: { id: id },
        dataType: 'html',
        success: function (data) {
            elm.addClass("cover");
        }
    });
});

答案 2 :(得分:0)

您正在尝试脱离上下文使用$(this)。你应该将它设置为一个变量,以便能够在你的AJAX回调中使用它,如下所示:

$("#dropzonePreview").on("click", "a.dz-cover", function () {
    var id = $(this).data('id');
    var element = $(this);
    $.ajax({
        type: 'POST',
        url: 'attachment/cover',
        data: {id: id},
        dataType: 'html',
        success: function (data) {
            element.addClass("cover");

        }
    });
});