为什么我不能在 ajax 成功中访问 $(this)

Why can't I access $(this) in ajax success

本文关键字:访问 this 成功 不能 ajax 为什么      更新时间:2023-09-26

这个问题很简单,我无法在我的jQuery ajax调用的成功部分中引用$(this),例如这不起作用(隐藏点击的元素):

    $('.assigned').click(function (event) {
        event.preventDefault();
        $.post("@Url.Action("method", "controller")",
        {
            TicketId: $(this).data("ticketid"),
        },
        function (data, status) {
            $(this).hide();
        });
    });

值得注意的是,数据已发送。但是,这可以很好地隐藏元素:

    $('.assigned').click(function (event) {
        event.preventDefault();
        $(this).hide();
        $.post("@Url.Action("method", "controller")",
        {
            TicketId: $(this).data("ticketid"),
        },
        function (data, status) {

        });
    });

为什么会这样?

在火狐中测试

你必须问问自己,你在这个代码中的位置?这将适用于什么?

您当前在:

function(data, status){
}

或:

$.post("@Url.Action("method", "controller")",
            {
                TicketId: $(this).data("ticketid"),
            }

因此,这将适用于您的函数,而不是您的元素。

只需做:

$('.assigned').click(function (event) {
        event.preventDefault();
        var $this = $(this);
         $this.hide();
        $.post("@Url.Action("method", "controller")",
        {
            TicketId: $this.data("ticketid"),
        },
        function (data, status) {
            $this //will work here
        });
    });

单击时将this分配给变量,然后使用该变量将其隐藏:

$('.assigned').click(function (event) {
    event.preventDefault();
    var $t = $(this);
    $.post("@Url.Action("method", "controller")",
    {
        TicketId: $(this).data("ticketid"),
    },
    function (data, status) {
        $t.hide();
    });
});