jqueryui对话框-Ajax成功更新$(this).Dialog(';close';);

jqueryui对话框-Ajax成功更新$(this).Dialog(';close';);,jquery,user-interface,jquery-ui-dialog,Jquery,User Interface,Jquery Ui Dialog,从嵌套的ajax“success”函数中引用$(this)时出现问题。。。我知道这是一个范围问题,但似乎找不到一个干净的方法来关闭一个成功更新的对话框。谢谢你的帮助 $("#dialog_support_option_form").dialog({ width: 400, height: 180, bgiframe: true, autoOpen: false, modal: true, button

从嵌套的ajax“success”函数中引用$(this)时出现问题。。。我知道这是一个范围问题,但似乎找不到一个干净的方法来关闭一个成功更新的对话框。谢谢你的帮助

$("#dialog_support_option_form").dialog({
        width: 400,
        height: 180,
        bgiframe: true,
        autoOpen: false,
        modal: true,
        buttons: {
            'Save Support Option': function(){
                $.ajax({
                    type: 'POST',
                    url: "support_options/create_support_option.php",
                    data: $(this).find('form').serialize(),
                    success: function(data){
                        $("#list_support_options").html(data);
                        $(this).dialog('close');
                    }
                });
            },
            'Cancel': function(){
                $(this).dialog('close');
            }
        },
        close: function(){
            $(this).find('input').val('');
        }
    });

您需要有该变量的副本,如下所示:

var dlg = $(this);
$.ajax({
   type: 'POST',
   url: "support_options/create_support_option.php",
   data: $(this).find('form').serialize(),
   success: function(data){
     $("#list_support_options").html(data);
     dlg.dialog('close');
   }
});
由于返回时
处于不同的上下文中,因此需要捕获它并将其传递到闭包中:)

使用
$.proxy()进行尝试


您可以使用它将“上面”的范围“传递”给函数

您应该使用ajax选项
上下文:$(这),
来设置回调到所选元素的范围。

@Jonathan Julian-所有这些都是闭包中的变量,您认为
上下文:
没有设置一些吗?:)是的,这是可行的,但我不希望使用额外的变量BOOM,bang,zing。正是我想要的。听说有关于此选项的谣言,但找不到。谢谢。太棒了,你也帮了我
success: $.proxy(function(data){
   $(this).dialog('close');
}, this);