Si verifica un problema di flusso di lavoro con le finestre di dialogo JQuery quando si tenta di creare le finestre di dialogo e quindi di eseguire il rendering di una pagina parziale. Proverò a passare attraverso uno scenario di esempio e mi scuso in anticipo per la descrizione del problema lungo:Finestra di dialogo JQuery: come eseguire un aggiornamento parziale della pagina e ottenere ogni volta nuove finestre di dialogo
Viene caricata la pagina, con l'html che vorrei essere trasformato in finestre di dialogo JQuery. Le finestre di dialogo vengono create su document.ready (utilizzando .dialog()
), ma la proprietà autoOpen è impostata su false. Quando JQuery crea le finestre di dialogo (se sto usando Firebug per ispezionare la pagina), la finestra di dialogo html viene effettivamente rimossa dalla sua posizione normale e bloccata alla fine del documento, con alcune classi wrapper attorno ad essa. L'utente apre le finestre di dialogo facendo clic su un collegamento che fa appena un $dialogDiv.dialog('open')
.
In modo che tutto funzioni correttamente. Il problema è che ci sono delle volte in cui eseguo una ricarica parziale della pagina usando AJAX (usando ASP.NET MVC RenderPartial). La parte della pagina che sto aggiornando sembra avere tutta la finestra di dialogo in esso contenuta, in modo che venga riscritta. Ma ricorda che la finestra di dialogo (con tutte le classi wrapper JQuery, ecc.) È già presente nella parte inferiore del documento. Quel html non faceva parte dell'aggiornamento della pagina, quindi ora sono bloccato con due gruppi di finestre di dialogo html. Questo mi dà tutti i tipi di problemi perché ho degli id duplicati sulla pagina e il comportamento di jQuery su questi elementi HTML diventa imprevedibile. È ancora peggio quando comincio a fare 3, 4, 5 aggiornamenti di pagine parziali, perché poi ho 3, 4, 5 set di finestre di dialogo html (con solo una vera finestra di dialogo creata su document.ready).
Sto pensando che a un certo punto potrei aver bisogno di distruggere i dialoghi o qualcosa del genere, ma non ho avuto fortuna con questo approccio. Qualcuno ha qualche idea?
Grazie mille.
@czarchaic, Grazie per la risposta. Potresti essere l'unica persona che ha avuto il tempo di leggere tutta la domanda. Una domanda di follow-up, però .. Ho finestre di dialogo come errori e finestre di avviso che non vorrei eliminare. Questi verrebbero svuotati e cancellati usando il metodo che hai dato. Osservando le finestre di dialogo create da JQuery, esso fornisce al wrapper esterno lo stesso elenco di classi su ognuna, che è 'ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable'. Come posso specificare quali finestre di dialogo svuotare e rimuovere e quali no? Grazie ancora. – BAHDev
@BAHDev. Aggiornerò il mio post – czarchaic