Domanda

è possibile caricare un'altra pagina con la finestra di dialogo dell'interfaccia utente di jquery?

Come Dialog + Ajax

Grazie

È stato utile?

Soluzione

Se vuoi caricare il contenuto in una finestra di dialogo usando Ajax, puoi facilmente usare $ .load:

// initialize dialog
var dialog1 = $("#dialog").dialog({ autoOpen: false,
  height: 600,
  width: 350
});

// load content and open dialog
dialog1.load('path/to/otherPage').dialog('open');

Controlla un esempio qui .

Altri suggerimenti

La progettazione della finestra di dialogo dell'interfaccia utente di JQuery è tale da richiedere il contenuto esistente su cui operare. In genere, negli esempi si tratta di un DIV tratto dal BODY esistente del DOM.

Ci sono casi in cui l'aggiunta di markup alle pagine esistenti solo per creare una finestra di dialogo - specialmente se il contenuto è caricato da AJAX - causa problemi. Ad esempio, potresti avere una libreria JavaScript che può essere chiamata da un numero di pagine e non vuoi aggiungere markup a ognuna di esse.

Un modo alternativo ( ispirato da questo ) è qui:

La differenza è che crei il DIV a livello di codice (verrà automaticamente aggiunto al DOM) - e quando la finestra di dialogo si chiude lo distruggiamo completamente - e lo rimuoviamo dal DOM all'evento 'close'.

function JQDialog(title, contentUrl, params) {
  var dialog1 = $("<div>").dialog(
  {
     autoOpen: false,
     modal: true,
     title: title,
     close: function (e, ui) { $(this).remove(); },
     buttons: { "Ok": function () { $(this).dialog("close"); } }
  });
  dialog1.load(contentUrl).dialog('open');
}

Sostituisci dialog1.load (contentUrl) .dialog ('open'); con il seguente se non vuoi che la finestra di dialogo si apra (e potenzialmente sfarfallio) fino al caricamento del contenuto. Ciò consentirà inoltre di centrarlo correttamente senza ulteriore lavoro.

dialog1.load(contentUrl, function () {
    $(this).dialog('open');
});

Preferisco aspettare di avere il contenuto per creare la finestra di dialogo. Mi sembra più semplice. Inoltre, il dimensionamento automatico non sembra funzionare diversamente:

    $.ajax({
        'url': contentUrl,
        'success': function success(data, textStatus, xhr) {
            $("<div>" + data + "</div>").dialog({
                "width": "auto",
                "height": "auto",
                "close": function (e, ui) { $(this).remove(); }
            });
        }
    });

Certo, includi solo un iframe nell'HTML della tua finestra di dialogo.

Se hai bisogno o desideri specificamente un iFrame invece di contenuti iniettati nel dom, ho un'estensione per questo qui: http://plugins.jquery.com/project/jquery-framedialog

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top