Les说我有一些同班的按钮。在页面加载时,我正在使用每个按钮的ajax检查一些值。根据ajax请求的返回值,我想在按钮中添加一些类,但它不起作用,
$(document).ready(function(){
$('.add-remove-permissoion').each(function(){
var child = $(this).val();
var parent = $('#parent-name').text();
$.get('my-url', function(data){
if(data == 1){
$(this).addClass('glyphicon glyphicon-ok');
}else{
$(this).addClass('emptybox-blank');
}
});
});
});
我检查过我的ajax请求正在返回正确的数据。我在这里做错了什么?
答案 0 :(得分:2)
问题是ajax回调中的这个引用,success
回调this
引用jqXHR
对象而不是dom元素引用,这就是它无法工作的原因。< / p>
您可以使用下面给出的闭包变量来解决问题
$(document).ready(function () {
$('.add-remove-permissoion').each(function () {
var $this = $(this),
child = $this.val();
var parent = $('#parent-name').text();
$.get('my-url', {}, function (data) {
if (data == 1) {
$this.addClass('glyphicon glyphicon-ok');
} else {
$this.addClass('emptybox-blank');
}
});
});
});
答案 1 :(得分:1)
ajax调用中的问题$(this)
并未引用单击的按钮。
将$(this).addClass
替换为myElement.addClass
。在ajax调用之前的点击事件中创建myElement
:var myElement = $(this)
。
答案 2 :(得分:1)
this
处理程序的上下文中的 $.get
未引用当前迭代的元素。每个函数都有自己的this
值。你有几个选择。
使用each
回调的第二个参数。
$('.add-remove-permissoion').each(function(index, element) {
使用$.proxy
或Function.prototype.bind
方法设置处理程序的this
值。
$.get('my-url', function(data) {
// ...
}.bind(this));
缓存this
处理程序的each
值,并在$.get
处理程序中使用它。
var elem = this;
$.get('my-url', function(data) {
// ...
$(elem)...
});
另请注意,代码中存在语法错误:
$.get('my-url'}, function(data){
// -----------^