我在帖子里面的函数内访问$(this)时遇到了很多麻烦 我想要做的就是根据响应删除对象类。
$.post("url.php?"+theData, {}, function(response){ etc.....
使用静态#ID可以正常工作,但我更喜欢操作$ this
答案 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
};
});