2010-02-16 65 views
5

JQuery Dialog最近给我带来了很多痛苦。 我有下面的div,我想弹出。 (忽略那些类不显示在语法中的双引号)Jquery Dialog - div在初始化后消失

TABLE class=widget-title-table border=0 cellSpacing=0 cellPadding=0> 
<TBODY> 
<TR> 
    <TD class=widget-title><SPAN class=widget-title>Basic Info</SPAN></TD> 
    <TD class=widget-action> 
    <DIV id=edit-actions jQuery1266325647362="3"> 
     <UL class="linkbutton-menu read-mode"> 
      <LI class="control-actions"> 
       <A id="action-button" class="mouse-over-pointer linkbutton">Delete this     stakeholder</A> 
      <DIV id="confirmation" class="confirmation-dialog title=Confirmation"> 
       Are you sure you want to delete this stakeholder? 
      </DIV> 

</LI></UL></DIV></TD></TR></TBODY></TABLE> 

jQuery的这是...

$(document).ready(function() { 

$('#confirmation').dialog({ 
    bgiframe: true, modal: true, autoOpen: false, closeOnEscape: false, 
    draggable: true, position: 'center', resizable: false, width: 400, height: 150 
    }); 

}); 

,并“通过

var confirmationBox = $('#confirmation',actionContent); 
if (confirmationBox.length > 0) { 


    //Confirmation Needed 
    $(confirmationBox).dialog('option', 'buttons', { 
     'No': function() { 
      $(this).dialog('close'); 
     }, 
     'Yes': function() { 
      $('ul.read-mode').hide(); 
      $.post(requestUrl, {}, ActionCallback(context[0], renderFormUrl), 'json'); 
      $(this).dialog('close'); 
     }    
    }); 

    $(confirmationBox).dialog('open'); 

} 
open'ed对话

问题从初始化本身开始。 加载文档时,将从标记中删除<div #confirmation>! 我以前有类似的问题,但我不能在这里使用该解决方案。 在这个页面上我可以有多个PopUp div。

当我在打开它之前添加了初始化;弹出窗体。但是在关闭它之后,div被移除;所以我无法再看到弹出窗口。

+0

你看着在萤火虫的控制台,看看是否有任何错误? – Samuel 2010-02-16 12:59:56

+0

在控制台上显示没有错误 – Zuber 2010-02-16 13:07:01

+0

为什么你不只是使用jQuery UI – ant 2010-02-16 13:13:18

回答

3

好的。我想我已经在你们的帮助下完成了。

一些“自定义”关于对话框的事实,我现在知道(请如果我错了纠正):

  1. <div>作为一个对话框被初始化,它是从原始位置移除,移至<div class="ui-dialog">中的<body>元素。所以它''自然'消失。

  2. 要选择对话框,您现在需要一个唯一的标识符。在大多数情况下,它可以是id,或者该div上的一些其他属性,使其在页面上唯一。

  3. 每次初始化对话框时都会创建对话框标记。因此,如果启动了已存在的对话框,则会发生AJAX调用,您将不止一次(重新初始化多次)弹出窗口。为了解决这个问题,我在删除现有的对话框标记之前重新进行了处理。我必须这样做,因为我的AJAX响应可能需要启动一些对话。

    function InitializeConfirmationDialog() { 
        $('div.confirmation-dialog').each(function() { 
        var id = $(this).attr("id"); 
        if ($('div.ui-dialog-content[id="' + id + '"]').length > 0) { 
         $('div.ui-dialog-content[id="' + id + '"]').parents('div.ui-dialog:first').html("").remove();     
        } 
        $(this).dialog({ 
         bgiframe: true, modal: true, autoOpen: false, closeOnEscape: false, 
         draggable: true, position: 'center', resizable: false, width: 400, height: 150 
        }); 
    
    
    }); 
    

    }

0

你确定只有一个div有id“确认”吗?不允许重复的ID。

+0

JQuery对话框仅在ID的工作? 我们不能做类似$('div.popup')。dialog({..})的东西吗? 截至目前,我确信该页面有一个“确认” – Zuber 2010-02-16 13:03:24

5

你看到它删除#confirmation的原因是因为$("#foo").dialog()会将#foo从DOM中的任何位置移动到文档的底部,该位置用于创建最初隐藏的对话框样式。据了解,直到打开对话框才会隐藏。

+0

谢谢。我刚刚意识到这一点。 我认为问题在于我在'actionContext'中再次搜索div。但是Jquery已经把这个div移到了范围之外。 那么,ID是打开对话框的唯一方法吗? – Zuber 2010-02-16 13:39:48

0

经批准的答案为我工作了。我正在使用:

$('.myLink').click(function(){ 
    $(this).next().dialog(...) 
}); 

并且它在第一次点击后并不存在。

现在我使用的ID direcly:

$("#myId").dialog(...) 

,显然,无论身在何处对话框移动到页面上,这就会找到它。

2

在我的情况下,一个简单的'返回错误;'在点击功能的诀窍:

$("#buttonIdThatOpensTheDialogWhenClicked") 
     .button() 
     .click(function() { 
       $("#myDialog").dialog("open"); 
       return false; 
     }); 
    });