2010-10-21 13 views
21

Ciao Sto usando il plugin jQuery fancybox per visualizzare mappe di bing quando qualcuno inserisce un indirizzo in una casella di testo e preme il pulsante di invio accanto. E una fancybox viene caricata e viene visualizzata una mappa per quell'indirizzo. Funziona bene con la mia applicazione, ma il problema è che funziona bene solo su una pagina e dall'altra, quando lo carico, mi dà un errore dicendo che fancybox non è una funzione. Vedo questo errore nella console degli errori e nella console firebug. Non sono sicuro di quale potrebbe essere il problema. Lo stesso codice funziona in un'altra pagina, ma non su questo?Fancybox non è una funzione

$("<a href=\"#showmap\">Map</a>").fancybox is not a function 

Sono sicuro che non si tratta di un problema di riutilizzabilità. Ma quando provo a vedere se i file originali di fancybox sono stati caricati, vengono caricati con dom, quindi potrebbe non essere un problema reale. Ma non sono in grado di capire cos'altro potrebbe essere il problema.

Questo è il mio codice

abbr: è solo un po 'di testo. Ho div diverse in base a ciò che l'utente seleziona. E ogni div avrebbe i suoi controlli, che comincerebbero da quel testo e saranno aggiunti con le proprie definizioni come mapresults, decValLat, decValLon ecc.

ex: abbr >> est e quindi gli ID sarebbero estmapresults, eastdecValLat, eastdecValLon ecc

function showMapFancybox(abbr){ 
    var abbr; 
    $('#'+abbr+'mapresults').hide(); 
    $('<a href="#showmap">Map</a>').fancybox({ 
     overlayShow: true, 
     onClosed: function() { 
      $('#'+abbr+'mapresults').show(); 
      map_latdec = $('#decValLat').attr('value'); 
      map_longdec = $('#decValLon').attr('value'); 
      map_latdeg = $('#degValLat').attr('value'); 
      map_longdeg = $('#degValLon').attr('value'); 

      $('#'+abbr+'decValLatsub').val(map_latdec); 
      $('#'+abbr+'decValLonsub').val(map_longdec); 
      $('#'+abbr+'degValLatsub').val(map_latdeg+'N'); 
      $('#'+abbr+'degValLonsub').val(map_longdeg+'W'); 
     } 
    }).click();  
}; 
+1

Perché dovresti ridefinire abbr in quanto argomento della tua funzione? – Harmen

+0

Ho appena modificato la domanda. Spero che aiuti. – macha

+0

Mi sembra che la pagina su cui non sta lavorando manchi il file javascript che definisce 'fancybox'. Hai controllato di includere gli stessi file javascript in entrambe le pagine? – andrewle

risposta

52

Ho già avuto questo tipo di errori perché stavo ricaricando jQuery dopo l'importazione del plugin, controlla di non reimportare jquery per errore (a volte incluso in un pacchetto come strumenti jQuery).

+1

come faccio a verificare se sto reimportando ?? Immagino che questo sia il problema – macha

+1

Cerca istanze multiple di codice sorgente jQuery. – Moses

+0

Abbiamo un metodo per cercare più istanze, che potrebbero accadere involontariamente ?? A partire da ora sono sicuro che sto caricando solo i plugin e l'origine jQquery solo una volta. Questo è nel mio layout predefinito. Ma ho letto anche altrove, che questo potrebbe essere il problema. – macha

2

Se "fancybox" come una funzione non esiste, è probabile che sia la fonte jQuery o l'origine plug-in non riescono a caricare nella tua pagina. Assicurati che il percorso, i nomi dei file e l'estensione siano tutti corretti.

MODIFICA: Assicurarsi di collegarsi a jQuery Source prima di collegarsi a qualsiasi plugin. Se un plugin è caricato nel tuo HTML prima che jQuery sia, il plugin fallisce.

3

È necessario caricare le estensioni come easing.js e mousewheel.js PRIMA di il plugin fancybox principale. Questo risolve il problema.

+1

Grazie amico. Ha risolto il mio problema. – aton1004

+0

Non ha risolto il problema: la mia pagina carica chiaramente il file js di fancybox ma genera ancora l'errore "fancybox non è una funzione". – jimiayler

+0

@jimiayler Lo hai caricato dopo i plugin? – doublejosh

0

Se si utilizza un plug-in che include JQuery nel tag di intestazione, questo problema può sorgere. Recentemente ho aggiunto "TheThe Slider" al mio blog, tutti i miei FancyBox hanno smesso di funzionare. Ci sono soluzioni semplici per questa situazione però. in pratica, vai nella directory dei plugin, cerca la chiamata a jquery e rendi il suo uso condizionale. Se vuoi vedere la mia implementazione di questo ho fatto blog about it con screen-capture.

1

Nel mio caso era jQuery.noConflict(); riga in un altro plugin jQuery ... quando ho rimosso tutto ha iniziato a funzionare.

2

Ho appena avuto questo problema, sembra che alcune versioni di jQuery non siano compatibili con le versioni di FancyBox, ad esempio Fancybox 1.3.4 è bacato con versioni di jQuery inferiori a 1.7 e non funziona su versioni superiori a 1.8.

0

Ho riscontrato questo problema nel mio sito Web WordPress e ho riscontrato che il problema si verificava a causa del numero fancybox.js che si presentava due volte nel codice da due plug-in installati. Quindi controlla il tuo codice e assicurati di caricare da una fonte.

0

Soluzioni possibili:

1) hai già caricato jQuery? In caso contrario, caricarlo prima dell'inizio di qualsiasi comando $.

2) Controllare, probabilmente si sta caricando la libreria jquery (.js) più volte durante la pagina. Prova a caricare solo uno.

3) Alla fine del file, è possibile eseguire questo comando javascript: $ = jQuery.noConflict(); e potrebbe risolvere. In caso contrario, utilizzare ovunque la parola jQuery anziché $ e funzionerà anche.

Problemi correlati