javascript - 为什么removeClass()和addClass()不起作用?

标签 javascript jquery ajax

我有一个 AJAX 调用将成功执行,但是当它到达 done() 部分时,它将打印出我的消息“SUCCESS”,但不会更改按钮的类。

$(".btn").click(function () {
    $.ajax({
        method: "POST",
        url: $(this).data("action"),
        data: {
            aId: $(this).data("a-id"),
            bId: $(this).data("b-id"),
            cId: $(this).data("c-id")
        }
    })
    .done(function () {
        console.log("SUCCESS");
        $(this).removeClass("btn-default");
        $(this).addClass("btn-success");
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        alert("FAILURE");
        $(this).removeClass("btn-default").addClass("btn-danger");
    });
});

我的猜测是,这与以下事实有关:我没有为函数提供要操作的按钮的 ID,而是对具有该类的任何被单击的内容进行操作“btn。”它源自的页面有一长串按钮,这就是为什么它们没有 ID,因为页面会给它们提供相同的 ID。我想我可以在 ID 上附加一个数字,但我不想这样做。它也没有解释为什么 $(this) 在检索值时在我的 AJAX 函数的其余部分中起作用。

最佳答案

$(this) 不是正确的this。尝试缓存该元素。

$(".btn").click(function () {
    var $btn = $(this);

    $.ajax({
        method: "POST",
        url: $(this).data("action"),
        data: {
            aId: $(this).data("a-id"),
            bId: $(this).data("b-id"),
            cId: $(this).data("c-id")
        }
    })
    .done(function () {
        console.log("SUCCESS");
        $btn.removeClass("btn-default");
        $btn.addClass("btn-success");
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        alert("FAILURE");
        $btn.removeClass("btn-default").addClass("btn-danger");
    });
});

关于javascript - 为什么removeClass()和addClass()不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38921144/

相关文章:

javascript - jQuery - 覆盖事件?

jquery - 如何使 JQuery.ajax 与超时同步?

javascript - polymer 形式在 Firefox 中不支持 Ajax-ing

javascript - Angular 所需的选择选项不适用于占位符

javascript - 使用 javascript 和 HTTP Referer 提取搜索引擎的关键字

javascript - jquery发送到新网页+传递变量

javascript - AJAX正在返回谷歌云上PHP文件的内容字符串

php - ajax 调用 php 脚本不工作

javascript - 使用 RXJS,有没有办法生成一个可观察对象,当源可观察对象当前发出的项目数量相同时,该可观察对象会发出?

javascript - 单击按钮可增加/扩展 Electron 窗口的高度