2010-09-12 2 views
16

Мне нравятся диалоговые окна jQueryUI. Однако, как представляется, нет возможности динамически загружать встроенный контент. Думаю, для этого я должен использовать какой-то другой подход? Будет ли iframes загружать контент только тогда, когда они станут видимыми? Это правильный способ сделать это?Как иметь диалоговое окно jQueryUI динамически загружать контент

Я открыт для других механизмов диалогового окна, если они больше подходят для загрузки содержимого только при первом открытии.

ответ

31

Это не трудно сделать - - Я бы не стал возиться с iframes только для этого. Как насчет чего-то подобного?

$(".selector").dialog({ 
    open: function(event, ui) { 
    $('#divInDialog').load('test.html', function() { 
     alert('Load was performed.'); 
    }); 
    } 
}); 

В принципе, вы создаете ваш диалог, и когда он открыт, HTML-файл загружается с сервера, заменив содержимое вашей <div id="divInDialog"></div>, которые должны быть в диалоговом <div class="selector"/>.

+12

+1 - Вы можете просто сделать '$ (это) .load (" URL ")' для большинства ситуаций :) –

+0

@Nick, так верно ... Я просто привык делать это так, потому что у меня есть статический контент в моих диалогах. Спасибо, что указали это. – Tauren

+0

Спасибо Таурен и Ник, я думаю, что я искал. Если пользователь закрывает диалоговое окно и затем снова открывает его, будет ли функция .load() jQuery снова получать данные? Я думаю, если нет, я всегда могу установить переменную javascript для этого ... –

14

вы можете создать пустой DIV на странице

<div id="dialog-confirm"><div> 

Настройка диалогового графического интерфейса отображаются JQuery с AutoOpen = ложь;

$("#dialog-confirm").dialog({ 
     resizable: false, 
     autoOpen: false, 
     height:140, 
     modal: true, 
     buttons: { 
      'Delete all items': function() { 
      $(this).dialog('close'); 
      }, 
     Cancel: function() { 
      $(this).dialog('close'); 
     } 
     } 
    }); 

тогда, когда вы хотите загрузить динамическую страницу, используйте JQuery Ajax вызов динамически поместить HTML в DIV, а затем вызвать диалог Открыть на этом дел. ниже приведен пример загрузки динамической страницы нажатием кнопки.

$("#someButton").click(function() 
    { 
     $.post("Controller/GetPage", function(data){ 
      $('#dialog-confirm').html(data); 
      $('#dialog-confirm').dialog('open'); 
     }, "html")}; 
    } 

также, если вы страница занимает некоторое время, чтобы загрузить в вызове Ajax, вы можете использовать некоторые загрузки изображения или jquery blockui plugin, чтобы показать, что что-то загружается

1

Я лично создаю «вид» для вашего диалогового окна, а затем продолжу на создаваемое вами диалоговое окно. Для теста я использовал следующий "вид":

var dialog = { 
    title: 'Dialog WITHOUT Modal', 
    modal: false, 
    height: 300 
}; 

Затем простирающуюся на диалоговое окно:

$('#modal-btn-btns').click(function(){ 
    $('#dialog-modal-btns') 
     .dialog($.extend(dialog, { 
      modal: true, 
      width: 500, 
      title: "Dialog with modal AND buttons", 
      buttons: { 
       "Trigger ALERT": function(){alert("NICE [email protected][email protected]!")}, 
       "Cancel": function(){$(this).dialog('close');} 
      } 
     })) 
     .html('This form has buttons!'); 
}); 
Смежные вопросы