在$ .post函数中访问$(this)?

时间:2012-07-28 15:07:31

标签: javascript jquery html ajax this

我在帖子里面的函数内访问$(this)时遇到了很多麻烦 我想要做的就是根据响应删除对象类。

  $.post("url.php?"+theData, {}, function(response){  etc.....

使用静态#ID可以正常工作,但我更喜欢操作$ this

3 个答案:

答案 0 :(得分:4)

尝试

var self = this; 
$.post("url.php?"+theData, {}, function(response){
    $(self).show(); // manipulate this
});

答案 1 :(得分:1)

这是来自异步事件的回调,因此指向该元素的this将丢失。

您需要保留对外部 this(元素)的引用。一种方法是通过一个立即执行的函数来绑定它:

$('#something').on('click', function() {
    $.post('somewhere.php').done((function(el) { return function(response) {
        $(el).removeClass('someClass');
    }; })(this));
});

答案 2 :(得分:0)

变量this始终指向当前上下文对象。

var obj = { // declare object
  a: 2,

  b: function (p) { 
    alert(this.a + p); // here 'this' will point to obj if it was run by 'obj.b();' 
  }
};

obj.b(2); // call it's method

您也可以设置当前的'this':

var s = { a: 3 };

var obj = {
  a: 2,

  b: function (p) { 
    alert(this.a + p); // here 'this' will be s 
  }
};

obj.b.call(s, 2);

如果你使用例如2个函数,另一个函数中的一个(f1)(f2)和f1的上下文应该在f2中可用,那么最简单的方法是将它存储在一个变量中;

$(buttonSelector).click(function () {
  var button = $(this);

  $.post(url, function (data) {
    //here button is available
  };
});