6

我有一个 ajax 调用,我禁用了一个复选框,然后我想在 ajax 完成后再次启用。但是我不能删除禁用后的属性。

$(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

4 回答 4

6

您需要保存对的引用,this因为this在 ajax 回调中是 ajax 请求。

$("input:checkbox").live("click", function(){
    var $this = $(this);
    ...
    ...
    success: function(data) {
        $('img.loader').fadeOut('slow',function(){$(this).remove()});
        $this.removeAttr('disabled');

或设置contextthis

    $.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'); 
      }  
于 2012-05-01T19:35:39.723 回答
3

this在 AJAX 成功处理程序中不会是复选框。您需要先缓存该变量,然后才能在成功处理程序中使用它。还值得注意的是,最好在使用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;
    });
});
于 2012-05-01T19:34:10.770 回答
2

我不认为成功函数中的“这个”是你认为的那样。尝试在您的复选框的 ajax 范围之外设置一个变量,然后在成功函数中引用它。

于 2012-05-01T19:34:28.587 回答
2

$(this)当您尝试重新启用您的复选框时,您超出了范围。

var newthis = $(this)之后添加

$("input:checkbox").live("click", function(){

并将您的呼叫更改为删除“禁用”属性

newthis.removeAttr('disabled');

于 2012-05-01T19:35:36.197 回答