$(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似乎不允许“this”。它会回发数据,警报也可以。
答案 0 :(得分:2)
this
不会引用单击的按钮。
解决方案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 :(得分:1)
当您在this
函数内部引用done
时,它将无法正常工作,因为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 );
});
});
});
答案 2 :(得分: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 );
});
});
});
希望这会有所帮助。