2015-04-09 11 views
5

Ho il seguente codice per rilevare se una finestra di jQuery UI è aperta:Come posso sapere se una query di dialogo dell'interfaccia utente jquery è stata inizializzata?

if ($("#dialog-myDialog").dialog("isOpen")) { 
     return; 
} 

che funziona bene, ma ho trovato una situazione in cui questo codice ottenere chiamato prima che la finestra di dialogo in fase di inizializzazione in primo luogo, e questo se la dichiarazione sembra solo saltare in questo caso.

Qual è il modo migliore per verificare se una finestra di dialogo dell'interfaccia utente jquery è stata inizializzata in modo da poter gestire correttamente questa situazione.

risposta

16

test se l'elemento ha la classe ui-dialog-content:

if ($("#dialog-myDialog").hasClass("ui-dialog-content") && 
    $("#dialog-myDialog").dialog("isOpen")) { 
    return; 
} 
3

Se si utilizza una soluzione che si basa sulla presenza di una classe CSS aggiunto da un componente che è fuori del vostro controllo, allora si corre il rischio di questo non funziona se una nuova versione del componente cambia il modo in cui gestisce le classi.

Una soluzione più affidabile potrebbe essere quella di aggiungere la tua indicatore di essere alla finestra di inizializzazione:

$("#popup").attr("_dialogInitialized", "yes").dialog({ ... }) 

quindi controllare l'indicatore quando è necessario:

if ($("#popup[_dialogInitialized]").length == 1) { 
    // dialog has been previously initialized 
} else { 
    // dialog has been not yet been initialized 
} 
+1

Questo ha funzionato perfettamente, grazie! – Markoh

0

aggiungere una classe quando initilizing:

$("selector").addClass("initialized").dialog({ ... }); 

Quindi verificare la classe quando necessario:

if ($("selector").hasClass("initialized")) { ... } 
Problemi correlati