如果ajax成功关闭一个对话框

时间:2016-10-17 16:37:25

标签: javascript jquery ajax

我正在使用对话框向db添加新用户,如果验证通过并且用户成功保存,我想关闭对话框。请建议

   $('.add_user_link a').each(function () {

            var $link = $(this);
            var $dialog = $('<div id="dialog"></div>')
                .load($link.attr('href') + ' #content')
                .dialog({
                    autoOpen: false,
                    title: $link.attr('title'),
                });

            $link.click(function () {

              $dialog.dialog('open');

                $('#add_user').submit(function () {

                    url = '/user/useradd/';
                    $.ajax({
                        type: "POST",
                        cache: false,
                        url: $('#add_user').attr('action'),
                        data: $('#add_user').serializeArray(),

                        success: function (data) {

                            var json_obj = $.parseJSON(data);
                            var result = json_obj['result'];
                            var lname = json_obj['lname'];
                            var email = json_obj['email'];
                            var fname = json_obj['fname'];

                            if (!result) {

                                $("#dialog").dialog('close');
                            }
                            else {
//                              
                                document.getElementById('email-error').innerHTML = email;

                                var fname_count = $("label[id*='errorfname']").length;

                                    $('input[name=fname]').after('<label id="errorfname"></label>');
                                    document.getElementById('errorfname').innerHTML = fname;



                                var lname_count = $("label[id*='errorlname']").length;
                                if (lname_count == 0) {
                                    $('input[name=lname]').after('<label id="errorlname"></label>');
                                    document.getElementById('errorlname').innerHTML = lname;
                                }




                            }



                        }


                    });
                    return false;
                });
                return false;
            });
        });

我收到此错误

  

jquery-1.11.1.min.js:2未捕获错误:在初始化之前无法调用对话框上的方法;试图调用方法'关闭'

1 个答案:

答案 0 :(得分:1)

替换:

$("#dialog").dialog('close');

使用

$dialog.dialog('close')

您已经在click函数中为对话框设置了一个变量,该变量应该在范围内,因此您无需重新选择它。

更新: 元素ID应该是唯一的,因此如果有多个链接,则在为链接添加时,应使对话框ID唯一。否则,当有多个链接时,当你执行$('#dialog')时,你将选择多个对话框元素。

执行此操作时:

$dialog = $('<div id="dialog"></div>')

ID值“对话框”应该是唯一的,例如“dialog1”,“dialog2”等。