.done不更新按钮值

时间:2013-10-19 09:10:59

标签: jquery

$(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”。它会回发数据,警报也可以。

3 个答案:

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

希望这会有所帮助。