javascript - 如果ajax成功则关闭对话框

标签 javascript jquery ajax

我正在使用对话框将新用户添加到数据库,如果验证通过并且用户成功保存,我想关闭对话框。请指教

   $('.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 Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

最佳答案

替换:

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

$dialog.dialog('close')

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

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

当你这样做时:

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

ID 值“dialog”应该是唯一的,例如“dialog1”、“dialog2”等。

关于javascript - 如果ajax成功则关闭对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091502/

相关文章:

javascript - 如何绕过框架或任何嵌入式框架上的 "Blocked call to navigator.vibrate because user hasn' t”?

javascript - Protractor :检查数据按日期排序

javascript - 如何创建 flex 的 css 内容分隔符?

javascript - Google map API 根据复选框操作 jQuery 重新中心化

javascript - 在实现复杂的 jQuery Image Slider 时卡住了

javascript - 验证密码并重新输入密码

javascript - 在 chrome 检查器中快速导入库

javascript - 检测到两个元素之一之外的点击?

javascript - 使用 ajax 将数据渲染成 html 的最佳实践

ruby-on-rails - 即使所有先前的请求都中止,jQuery AJAX 请求仍很慢