我如何在$ .post里面引用$(this)元素

时间:2011-06-07 09:11:43

标签: jquery this

我有这段代码

    $.post("recommend.php",{"jid":jid,"vid":vid,"eid":eid},function(data){
        if(data=="1")
            {
                $(this).text("Recommended");

            }
            else
                {
                    $(thelink).text("Recommend");
                }
    });

帖子正确执行但链接上的文字没有改变,虽然数据等于1.任何帮助......

3 个答案:

答案 0 :(得分:5)

this指当前上下文。在你的AJAX回调中,它与你的一个调用函数不同。

但是,您只需使用var $this = $(this);保留它,然后在回调中使用$this而不是$(this);

var $this = $(this);
$.post("recommend.php", {
    "jid": jid,
    "vid": vid,
    "eid": eid
}, function (data) {
    if (data == "1") {
        $this.text("Recommended");
    } else {
        $(thelink).text("Recommend");
    }
});

当然,另一个名字也可以。例如,要保留普通this许多人使用selfthat

另一种解决方案是使用$.ajax({ context: this, ...... }));在回调中保留相同的上下文(如果未指定,this指向传递给$.ajax()的选项对象

答案 1 :(得分:3)

在调用$.post

之前将其设置为变量
var that = $(this);
$.post(..., function() {
    that.myFunction();
}

答案 2 :(得分:1)

默认情况下,AJAX回调中的this是请求的jqXHR对象。

您应该缓存对链接的引用(如您对thelink所做的那样)或使用context选项$.ajax

$.ajax({
    url: "recommend.php",
    type: 'POST',
    data: {
        "jid": jid,
        "vid": vid,
        "eid": eid
    },
    context: this,
    success: function (data) {
        if (data == "1") {
            $(this).text("Recommended");

        } else {
            $(thelink).text("Recommend");
        }
    }
});

context选项设置回调函数的上下文 - 即它在其中定义this。通过将其设置为this的外部值(对链接的引用),您可以在回调中访问$(this)的链接。