2013-10-19 60 views
1
$(document).ready(function(){ 
    $('.msg-buttons :button').on("click",function(event) { 
     var id = $(this).attr("data-rel"); 

     $.get("account/process-actions.php", { value: id }) 
      .done(function(data) { 
       $(this).attr('value', data); 
       //alert("Data Loaded: " + data); 
      }); 
    }); 
}); 

我想更新一個按鈕的值後,我有一個按鈕更改數據庫中的值(有一組按鈕)。.done不更新按鈕值

上述問題是.done似乎不允許「this」。它確實發回了數據,並且警報也起作用。

回答

2

this裏面的done處理程序不參考點擊按鈕。

解決方案1.使用閉合可變

$(document).ready(function() { 
    $('.msg-buttons :button').on("click", function (event) { 
     var id = $(this).attr("data-rel"); 

     var $this = $(this); 
     $.get("account/process-actions.php", { 
      value: id 
     }).done(function (data) { 
      $this.attr('value', data); 
      //alert("Data Loaded: " + data); 
     }); 
    }); 
}); 

解決方案2:使用$.proxy()到自定義執行上下文傳遞給回調方法

$(document).ready(function() { 
    $('.msg-buttons :button').on("click", function (event) { 
     var id = $(this).attr("data-rel"); 

     $.get("account/process-actions.php", { 
      value: id 
     }).done($.proxy(function (data) { 
      $(this).attr('value', data); 
      //alert("Data Loaded: " + data); 
     }, this)); 
    }); 
}); 
1

當引用thisdone函數內,它不會按預期工作,因爲this現在與$('.msg-buttons :button')函數的範圍不同。如果你創建一個變量來引用它,它應該工作。試試這個:

$(document).ready(function(){ 
    $('.msg-buttons :button').on("click",function(event) { 
     var id = $(this).attr("data-rel"); 
     var self = this; 

     $.get("account/process-actions.php", { value: id }) 
      .done(function(data) { 
       $(self).attr('value', data); 
       //alert("Data Loaded: " + data); 
      }); 
    }); 
}); 
1

你已經將這個上下文存儲在變量中並使用該變量。

$(document).ready(function(){ 
$('.msg-buttons :button').on("click",function(event) { 
    var that = $(this); 
    var id = that.attr("data-rel"); 

    $.get("account/process-actions.php", { value: id }) 
     .done(function(data) { 
      that.attr('value', data); 
      //alert("Data Loaded: " + data); 
     }); 
}); 
}); 

希望這有助於。