Jquery对话验证

时间:2011-03-08 03:07:28

标签: jquery ajax validation jquery-ui dialog

我的问题是,当我关闭对话框然后再打开另一个时,我应用于加载ajax的JqueryUI对话框的所有JavaScript都不起作用。

我注意到的一些事情是,当我关闭它时,html才会被隐藏,实际上并没有被删除。调用$ dialog.dialog(“destroy”);没有帮助。删除隐藏的html也不会。我不确定如何销毁验证对象(文档没有说明任何内容),或者如果在关闭对话框中这样做甚至会有所帮助。我基本上只想在关闭对话框时返回初始页面加载短语,因此打开另一个将重新创建验证对象等。

我遇到了像TinyMCE这样的其他小部件的问题,一旦我关闭第一个对话框并打开其他小部件,它就不会再次初始化。

以下是我的代码的简化版本 - 一个这样的对话框 -

var create_contact_dialog = function () {
    var $contactDialog = $('<div></div>')
    .dialog({
        autoOpen: false,
        dialogClass: "contact_form_dialog",
    });
    $contactDialog.dialog('open');
    return $contactDialog;
};

$('#open_contact_form').live('click', function () {
    var $contactDialog = create_contact_dialog();
    $contactDialog.load('/contact_form', function () {
        contact_form_validator = $("#contact_form").validate({
            rules: {
                name: {
                    required: true
                },
            }
        });
    });
});

任何指针都表示赞赏!

1 个答案:

答案 0 :(得分:1)

关闭后,您需要删除对话框的DOM,因为每次加载的表单都具有相同的确切ID(这导致后续加载仍然引用具有该ID的第一个DOM)。您可以通过提供删除对话框内容的close函数回调来完成此操作:

var create_contact_dialog = function () {
    var $contactDialog = $('<div></div>')
    .dialog({
        autoOpen: false,
        dialogClass: "contact_form_dialog",
        close: function() {
            $contactDialog.remove();
        }
    });
    $contactDialog.dialog('open');
    return $contactDialog;
};

我在这里提供了一个例子,如果您删除关闭功能,您将看到警报不起作用。

jsfiddle example