我有一个禁用复选框的ajax调用,然后我想在ajax完成后再次启用。但是,我无法删除属性已禁用aterwards。
$(function(){ // added
$("input:checkbox").live("click", function(){
var a_href = $(this).attr('id');
var checked = $(this).attr('checked');
if (checked == 'checked') {
checked = 1;
}else {
checked = 0
};
$(this).parent().parent().after('<img class="loader" style="padding-botton:0 !important;" alt="" src="images/loaders/loader.gif">');
$(this).attr('disabled','disabled');
$.ajax( {
type: "POST",
url: "includes/featured.php",
data: { id: a_href, value: checked, field: "main_feature" },
success: function(data) {
$('img.loader').fadeOut('slow',function(){$(this).remove()});
$(this).removeAttr('disabled');
}
}).done(function (data){
}
);
return false;
});
}); // added
我也尝试过:
.attr('disabled', false);
答案 0 :(得分:4)
您需要保存对this
的引用,因为ajax回调中的this
是ajax请求。
$("input:checkbox").live("click", function(){
var $this = $(this);
...
...
success: function(data) {
$('img.loader').fadeOut('slow',function(){$(this).remove()});
$this.removeAttr('disabled');
或将context
设置为this
:
$.ajax( {
type: "POST",
context: this, // <===============
url: "includes/featured.php",
data: { id: a_href, value: checked, field: "main_feature" },
success: function(data) {
// Now this is the checkbox!
$('img.loader').fadeOut('slow',function(){$(this).remove()});
$(this).removeAttr('disabled');
}
答案 1 :(得分:3)
this
将不是复选框。您需要先缓存该变量,然后才能在成功处理程序中使用它。值得注意的是,删除属性时最好使用prop
或removeProp
。试试这个:
$(function(){ // added
$("input:checkbox").live("click", function(){
var $checkbox = $(this);
var a_href = $checkbox.attr('id');
var checked = $checkbox.attr('checked');
checked = (checked == "checked") ? 1 : 0;
$checkbox.parent().parent().after('<img class="loader" style="padding-botton:0 !important;" alt="" src="images/loaders/loader.gif">');
$checkbox.attr('disabled','disabled');
$.ajax( {
type: "POST",
url: "includes/featured.php",
data: { id: a_href, value: checked, field: "main_feature" },
success: function(data) {
$('img.loader').fadeOut('slow',function(){$(this).remove()});
$checkbox.removeProp('disabled');
}
}).done(function (data) {});
return false;
});
});
答案 2 :(得分:2)
我认为成功功能中的'this'不是你认为的那样。尝试在复选框的ajax范围之外设置一个变量,然后在成功函数中引用它。
答案 3 :(得分:2)
当您尝试重新启用复选框时,$(this)
超出了范围。
在
之后添加var newthis = $(this)
$("input:checkbox").live("click", function(){
并更改您的电话,将'禁用'attr移至
newthis.removeAttr('disabled');