jQuery删除ajax中的属性

时间:2012-05-01 19:32:22

标签: javascript jquery

我有一个禁用复选框的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);

4 个答案:

答案 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)

AJAX成功处理程序中的

this将不是复选框。您需要先缓存该变量,然后才能在成功处理程序中使用它。值得注意的是,删除属性时最好使用propremoveProp。试试这个:

$(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');