javascript - 无法在 AJAX 成功函数内操作 DOM

标签 javascript jquery ajax asp.net-mvc

我想知道为什么我无法更改 AJAX 成功时的“this”元素。正如您所看到的,我正在尝试交换类,并在 ajax 成功时向 anchor 标记添加一个新的数据属性,但它不起作用。如果我将代码移到成功函数之外,它会完美地工作...我可以在检查元素时看到它实时更新(仅当代码位于成功之外时)

<a href="#" data-product-Id="@product.Id" class="lnkProduct">Add new product</a>

$(".lnkProduct").click(function (e) {
    e.preventDefault();

    var productId = $(this).attr('data-product-Id');

    $.ajax({
        type: "POST",
        url: "/Products/AddProduct",
        data: { productId: productId },
        dataType: "html",
        success: function (data) {
            $(this).addClass('lnkNewProduct').removeClass('lnkProduct');
            $(this).attr('data-newProduct-Id', data);
        }
    });
});

最佳答案

$(this) 将在 ajax success 函数中给出不同的上下文。试试这个:-

<a href="#" data-product-Id="@product.Id" class="lnkProduct">Add new product/a>

$(".lnkProduct").click(function (e) {
        e.preventDefault();
        var $this = $(this); //store $(this) reference in a variable
        var productId = $(this).attr('data-product-Id');

        $.ajax({
            type: "POST",
            url: "/Products/AddProduct",
            data: { productId: productId },
            dataType: "html",
            success: function (data) {
                $this.addClass('lnkNewProduct').removeClass('lnkProduct'); //change here
                $this.attr('data-newProduct-Id', data); //change here
            }
        });
});

关于javascript - 无法在 AJAX 成功函数内操作 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35568730/

相关文章:

javascript - 如何将相同的 javascript 添加到 Acrobat pdf 中的互斥复选框?

javascript - 使用外部超链接激活 CSS Tab

javascript - 引用错误: global is not defined with web3

javascript - 使用ajax将表单数据和文件传递给php

javascript - 如何获取复杂对象的 JSON 字符串值?

php - 如何创建 "Next Page"链接到 mySQL 搜索的 "non-displayed"结果?

javascript - Javascript 预加载内容 three.js

javascript - 按下按钮时,使用 Javascript 在 HTML 中突出显示选项卡

jquery - 转换不适用于 jQuery

javascript - 在 AJAX 发布内容按钮上使用 jQuery .click()