1

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

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

它适用于静态#ID,但我更愿意操纵 $this

4

3 回答 3

4

尝试

var self = this; 
$.post("url.php?"+theData, {}, function(response){
    $(self).show(); // manipulate this
});
于 2012-07-28T15:13:54.957 回答
1

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

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

$('#something').on('click', function() {
    $.post('somewhere.php').done((function(el) { return function(response) {
        $(el).removeClass('someClass');
    }; })(this));
});
于 2012-07-28T15:10:52.183 回答
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);

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

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

  $.post(url, function (data) {
    //here button is available
  };
});
于 2012-07-28T15:16:31.630 回答