JQuery UI Dialog - Ajax-обновление об успехе $ (this) .dialog ('close'); - PullRequest
11 голосов
/ 06 апреля 2010

Возникли проблемы со ссылкой на $ (this) из вложенной функции ajax 'success' ... Я знаю, что это проблема области действия, но не могу найти чистый способ закрыть диалог при успешном обновлении. Спасибо за любую помощь.

$("#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('');
        }
    });

Ответы [ 3 ]

21 голосов
/ 06 апреля 2010

Вы должны использовать опцию ajax context: $(this),, чтобы установить область для обратных вызовов для выбранного элемента.

4 голосов
/ 06 апреля 2010

Вам нужна копия этой переменной, например:

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');
   }
});

Поскольку this находится в другом контексте при возврате, вам нужно захватить его и передать в замыкание:)

2 голосов
/ 06 апреля 2010

Попробуйте с $.proxy()

success: $.proxy(function(data){
   $(this).dialog('close');
}, this);

Вы можете «передать» область действия «сверху» функции с ней

...