2010-02-16 64 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; 
     }); 
    });