2009-12-27 4 views
16

Sto sviluppando un sito utilizzando pinax. In uno dei miei modelli sto provando ad aprire una semplice finestra di dialogo jquery. Tuttavia continuo ad avere l'errore javascript "Dialog not a function". Sto usando jquery 1.2.6 e jquery-ui 1.6. Il mio javascript e HTML sono i seguenti:Finestra di dialogo dell'interfaccia utente JQuery - * Dialog not a function * error

<html> 
<head> 
<link type="text/css" href="/site_media/smoothness/ui.all.css" rel="stylesheet" /> 
<script src="/site_media/jquery.js" type="text/javascript"></script> 
<script src="/site_media/ui/ui.core.js" type="text/javascript"></script> 
<script src="/site_media/ui/ui.draggable.js" type="text/javascript"></script> 
<script src="/site_media/ui/ui.resizeable.js" type="text/javascript"></script> 
<script src="/site_media/ui/ui.dialog.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
        $('#dialogbox').dialog(); 
      }); 
</script> 
</head> 
<body> 
    <div id="dialogbox" title="dialog title"> 
    <p>Test dialog</p> 
    </div> 
</body> 
</html> 

Qualcuno può spiegare perché questo sta accadendo?

+1

Il codice delle finestre di dialogo dell'interfaccia utente jQuery non è stato inizializzato correttamente per qualche motivo. Prova a creare un file js dell'interfaccia utente jquery corretto anziché fare riferimento a uno a uno: potrebbe risolvere il tuo problema. È così che dovresti usarlo comunque. Date un'occhiata a http://jqueryui.com/download –

+0

Ho provato anche questo approccio, ma mi dà lo stesso errore. – kartikq

+0

Sei sicuro che i file javascript che stai includendo sono le versioni ufficiali dei file e non sono stati personalizzati (inavvertitamente interrompendo qualcosa)? –

risposta

36

Ho provato a duplicare il tuo errore sia utilizzando le versioni pubbliche di Google sia scaricando la versione legacy (1.6) dal sito dell'interfaccia utente jQuery e includendo manualmente i file. Nessuno dei due ha causato un problema (http://jsbin.com/uloqi per vederlo funzionante).

Quindi, questo significa che una delle seguenti potrebbero risolvere il problema:

  1. utilizzare uno strumento come Firebug per Firefox per verificare ogni file JS viene incluso.
  2. Assicurarsi che non ci siano altri JS sulla pagina che potrebbero causare un errore.
  3. Verificare di disporre delle versioni corrette dei file scaricati.

Non so cos'altro dire, dal momento che il codice incollato, se associato ai file giusti, funziona perfettamente.

+9

Doug, avevo un altro file JS incluso nella mia pagina che stava causando questo. Ho bisogno di bere più caffeina. – kartikq

+6

+1 punto 2 ° mi ha aiutato. 2 librerie jQuery aggiunte allo stesso documento. – karlisup

+1

Assicurati di non aver personalizzato la tua build dell'interfaccia utente jQuery per non includere il componente di dialogo. – Twilite

4

Ho avuto lo stesso identico problema di quello sopra descritto (la finestra di messaggio si apre solo una volta). Il problema che ho avuto è stato che il codice html nella messagebox carica anche jquery. Dal momento che non ne ho avuto bisogno, ho potuto rimuoverlo senza problemi. Altrimenti potrebbe essere necessario risolvere il problema un po 'oltre.

2

In determinate circostanze è possibile ottenere questo errore se vengono caricate contemporaneamente versioni multiple e JQuery diverse.

Nel mio caso, ho una pagina ASP che utilizzava un master. mio padrone era compresa JQuery 1.4.2.min mia pagina aspx ho incluso JQuery 1.7.2.min

Quando le funzioni JQuery sono stati chiamati da un controllo, ha ottenuto confusi su quale JQuery da usare così anche se questo script potrebbe stato che JQuery è stato caricato (potrebbe visualizzare la versione di JQuery), non è riuscito a trovare alcuna funzione di JQuery.

Quando ho rimosso l'inclusione JQuery 1.7.2.min locale dal mio file aspx e aggiornato il mio mater da 1.4.2.min a 1.7.2.min, il problema è andato via.

2

La risposta di Doug Neiner è stata di grande aiuto. Il mio caso era un po 'più complicato, ma viene ancora allo stesso punto:

ho aperto una finestra di dialogo dalla pagina A che carica pagina B come questo:

$('#MyDiv').dialog({ 
    autoOpen: false 
}) 
$("#MyDiv").load("PageB.aspx", function() { 
    $("#MyDiv").dialog("open"); 
}); 

Il problema è che sia Pagina A e B avevano incluso jQuery. Attenzione: se stai caricando un'altra pagina in una finestra di dialogo, non è necessario includere lo stesso js.

0

Come già spiegato, probabilmente si sostituiscono le librerie esistenti.

Un modo per gestirlo è garantire che vengano caricati i file corretti.

Un altro modo è inserire un iframe tra la finestra di dialogo e il contenuto nella finestra di dialogo. Gli iframe sono trattati dal browser come una pagina separata con i propri script. Quindi gli script del contenuto "in cima" all'iframe, saranno separati dagli script della finestra di dialogo "sotto" l'iframe.

0

mi resta che questo problema troppo e l'unica soluzione che funziona per me era quello di salvare il riferimento finestra di dialogo come:

var confirmDialog = $("#dialog-confirm").dialog({ 
    autoOpen: false 
}); 
$("#test").click(function() { 
    confirmDialog.dialog('open'); 
}); 

In caso contrario, tutto quello che ho provato non riuscita con

.dialog() is not a function error
Spero che questo aiuto.

+0

salvarlo come riferimento non ha funzionato per me :( – Anupam

0

Ho avuto lo stesso problema. Il mio è stato auto-inflitto da un aggiornamento dell'interfaccia utente jQuery da 1.11.4 a 1.12.1. Ho installato l'aggiornamento utilizzando NuGet e NuGet ha rimosso il vecchio riferimento 1.11.4 dal mio progetto ma non ha mai aggiunto il nuovo riferimento al progetto.

In esecuzione localmente l'applicazione ha funzionato benissimo, ma al momento della sua distribuzione il nuovo file 1.12.1 non è mai stato creato con la pubblicazione. Spero che questo aiuti qualcun'altro.