2011-03-08 95 views
1

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

我注意到的几件事情是,当我关闭它时,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

由于每次加载的表单都具有相同的确切ID(导致后续加载仍然引用具有该ID的第一个DOM),您将需要在对话框关闭后删除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