2013-04-10 23 views
0

我有一個菜單,菜單中的每個鏈接都通過模態對話框打開。我試圖避免每次單擊一個鏈接不止一次創建相同的對話框。避免每次單擊鏈接時打開相同的對話框

我已經試過檢查

if(outputHolder.hasClass('ui-dialog-content:visible')){return false;} 
$("body").append(outputHolder); 
outputHolder.load($this.attr("href"), null, function() {  
outputHolder.dialog(

否則將顯示對話框..

任何建議?

完整代碼

http://jsfiddle.net/6qgTr/5/

+1

沒有任何反應,當我點擊小提琴的搜索鏈接。應該發生什麼? – 2013-04-10 15:33:31

+0

所以你應該說你想在每個菜單鏈接上使用不同的模態彈出窗口?小提琴不再工作 – 2013-04-10 15:35:01

+0

即時通訊說,每次我點擊搜索它會創建一個新的對話框..所以即時通訊想知道如何避免這種行爲,並使對話彈出只有一次,當鏈接被點擊。 – 2013-04-10 16:01:40

回答

1

你想,這樣只有在第一次顯示該對話框的AJAX調用時,但在隨後的點擊,該對話框沒有Ajax調用正在重塑,重新顯示正確?

如果是這樣的話,我認爲你首先必須擺脫下面的代碼,因爲它關閉時刪除了對話框的元素。沒有它,元素​​將保持不變,但被隱藏。

close: function(event, ui) { $(this).remove(); } 

您還需要跟蹤對話框div元素,以便您可以重新使用它們。你可以使用.data()這個方法。

function openDialog($dialogDiv) { 
    $dialogDiv.dialog({ 
     // options, but not including 'close' 
    }); 
} 

function loadEmployeesShow(link) { 
    var $link = $(link), 
     $dialogDiv = $link.data('dialogDiv'); 
    if (!$dialogDiv) { 
     console.log('creating new dialog'); 
     $dialogDiv = $('<div>'); 
     $link.data('dialogDiv', $dialogDiv); 
     $dialogDiv.load($link.attr('href'), function() { openDialog($dialogDiv); });  
    } else { 
     console.log('reusing existing dialog'); 
     openDialog($dialogDiv); 
    } 
}; 

jsfiddle

0

你應該建立在你的HTML代碼中的div會被用作對話,而不是在飛行創造它的基礎開始。然後你可以打開和關閉這個相同的對話框,而不是每次創建一個新對話框。

還保留所有JavaScript代碼與HTML分開。

在您的對話框設置上,您擁有的第一個選項是bgiframe: true這不是對話框的有效選項。

你不會是能夠從https://www.google.com.ar

引述jQuery ajax page

由於瀏覽器的安全限制加載數據的對話框中,大多數「Ajax」的請求都受到同樣的原產地政策;該請求無法成功從不同的域,子域或協議中檢索數據。

你將不得不指向你自己的服務器上的一個腳本,它會做你所需要的任何檢索。

I created a new fiddle with what I think you want.

相關問題