为什么我无法在ajax成功中访问$(this)

时间:2015-03-16 15:53:02

标签: javascript jquery ajax

问题非常简单,我不能在我的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) {



        });

    });

为什么会这样?

在FireFox中测试

2 个答案:

答案 0 :(得分:2)

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

您目前在:

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

        });

    });

答案 1 :(得分:0)

在点击时将this分配给变量,然后使用变量隐藏它:

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

    },
    function (data, status) {
        $t.hide();
    });

});