Javascript Jquery不起作用.$(本)

TIM*_*MEX 2 javascript jquery

$(document).ready(function() {
    $(".delete_user_button").click(function(){
        var username_to_delete = $(this).attr('rel');
        $.ajax({
            type:"POST",
            url:"/delete/",
            data:{'username_to_delete':username_to_delete},
            beforeSend:function() {
                $(this).val("Removing...");
            },
            success:function(html){
                $("div.delete_div[rel=" + username_to_delete + "]").remove();
            }
            });
        return false;
    });
});
Run Code Online (Sandbox Code Playgroud)

为什么$(this).val()不起作用?我正在尝试在用户单击删除时更改按钮的文本.

Phi*_*ert 10

在事件处理程序(beforeSend)中,this引用用于ajax调用的XMLHttpRequest对象,而不是this单击事件处理程序的原始对象.你应该首先在变量中"捕获"它:

$(document).ready(function() {
    $(".delete_user_button").click(function(){
        var element = $(this);
        var username_to_delete = element.attr('rel');
        $.ajax({
            type:"POST",
            url:"/delete/",
            data:{'username_to_delete':username_to_delete},
            beforeSend:function() {
                element.val("Removing...");
            },
            success:function(html){
                $("div.delete_div[rel=" + username_to_delete + "]").remove();
            }
            });
        return false;
    });
});
Run Code Online (Sandbox Code Playgroud)

这种机制称为"闭包".有关此问题的有趣解释,请查看此链接:

http://www.bennadel.com/blog/1482-A-Graphical-Explanation-Of-Javascript-Closures-In-A-jQuery-Context.htm