2009-09-23 90 views
1

我发现this thread基本上我有同样的问题。但他们的解决方案并不适合我。jQuery对话框第二次不开放

对话框第一次单击提交按钮时出现,但不是第二次。 我在表单提交后打开对话框。

UPDATE

我终于得到了它的工作。下面是正确的代码:

if (jQuery('#registrationforms').length > 0) { 
    //instantiate the dialog 
    jQuery("#dialog").dialog({ modal:true, autoOpen:false }); 

    //Some more code here to call processRegistration function. 
    } 

    function processRegistration(instanceID, formData) 
    { 

    jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData, instanceID : instanceID }, 
     function(feedback) 
     { 
     jQuery('#dialog').text(feedback.message); 
     jQuery('#dialog').parent().addClass(feedback.type); 
     jQuery('#dialog').dialog('open'); 
     },"json"); 

    } 

由于我申请动态CSS类,我必须确保将其添加到外DIV其中$ .dialog创建包我的“对话” DIV。

回答

1

不要使用dialog()来初始化对话框并同时打开它。我也犯了这个错误。

首先初始化对话框,然后在回调中打开它,像这样:

jQuery('#dialog').dialog({ autoOpen: false }); 

function processRegistration(instanceID, formData) { 
jQuery.post(..., 
    function(feedback) { 
    var dialog = jQuery('#dialog'); 
    dialog.text(feedback.message); 
    dialog.addClass(feedback.type); 
    dialog.dialog('open'); 
    }, "json"); 
}; 
+0

dialog.attr('class',feedback.type)将覆盖默认类。我需要添加一个类。你将如何打开对话框? – Steven 2009-09-23 22:20:55

+0

哎呀!编辑。 (attr() - > addClass(),加上打开) – 2009-09-23 22:54:38

+0

好的,谢谢。我仍然获得与上面更新的代码相同的结果。我仍然有同样的问题 - 添加的类的css不会呈现。 – Steven 2009-09-24 16:36:43

4

我认为RayLehman在您引用的帖子中高度投票回答是正确的解决方案。

jQuery UI的dialog()函数实际上创建了一些内容的对话框。你实际上并没有在任何地方的对话框上调用“打开”。

一旦通过第一次调用dialog()创建对话框,您只需调用对话框(“打开”)或对话框(“关闭”),而不是每次都重新创建实际的对话框对象。

+0

Womp是正确的,YPU必须每次你需要它的时候esplicitely打开对话框。 – 2009-09-23 22:10:48

+0

我现在正在修改代码。我现在想念的是根据反馈类型添加正确的类。 – Steven 2009-09-23 22:24:33

0

这听起来像是你用init调用打开了你的open事件。您需要确保首先初始化对话框 - 通常将autoOpen属性设置为false - 然后有一个单独的单击事件来打开对话框。

阅读this article来详细解释它。

相关问题