2010-10-21 10 views
21

Hola Estoy utilizando el complemento de jQuery fancybox para mostrar los mapas de bing cuando alguien ingresa una dirección en un cuadro de texto y presiona el botón Enviar junto a él. Y se carga un fancybox y se muestra un mapa para esa dirección. Esto está funcionando bien con mi aplicación, pero el problema es que solo funciona bien en una página y en la otra, cuando la cargo, me está dando un error al decir que Fancybox no es una función. Veo este error en la consola de error y en la consola de Firebug. No estoy seguro de cuál podría ser el problema. El mismo código funciona en otra página, pero no en esta?Fancybox no es una función

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

Estoy bastante seguro de que no es un problema de reutilización. Pero cuando pruebo para ver si los archivos originales de fancybox se han cargado, se cargan con el dom, por lo que podría no ser un problema real. Pero no puedo entender qué otra cosa podría ser el problema.

Este es mi código

abbr: es sólo un poco de texto. Tengo diferentes divs basados ​​en lo que el usuario selecciona. Y cada div tendría sus propios controles, que comenzarían con ese texto y se anexarían con sus propias definiciones, como mapresults, decValLat, decValLon, etc.

ex: abbr >> east y luego los ids serían thismapresults, eastdecValLat, etc. eastdecValLon

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

¿Por qué redefiniría abbr ya que es un argumento de su función? – Harmen

+0

Acabo de editar la pregunta. Espero que esto ayude. – macha

+0

Me parece que la página en la que no funciona no tiene el archivo javascript que define 'fancybox'. ¿Has verificado que estés incluyendo los mismos archivos javascript en ambas páginas? – andrewle

Respuesta

52

Ya tuve este tipo de errores porque estaba recargando jQuery después de la importación del complemento, compruebe que no vuelva a importar jquery por error (a veces incluido en un paquete como las herramientas de jQuery).

+1

¿cómo puedo verificar si estoy reimportando? Supongo que ese es el problema – macha

+1

Busque varias instancias del código fuente jQuery. – Moses

+0

¿Tenemos un método para buscar instancias múltiples, lo que puede ocurrir involuntariamente? Por el momento, estoy seguro de que solo estoy cargando los complementos y la fuente jQquery solo una vez. Eso está en mi diseño predeterminado. Pero también he leído en otra parte, que este podría ser el problema. – macha

2

Si "FancyBox" como no existe una función, es probable que sea la fuente de jQuery o la fuente del plugin están fallando para cargar en su página. Asegúrese de que la ruta, los nombres de archivo y la extensión sean todos correctos.

EDIT: Asegúrese de que se vincula a jQuery Source antes de vincular a los complementos. Si se carga un complemento en su HTML antes de jQuery, el complemento falla.

3

Debe cargar las extensiones como easing.js y mousewheel.js ANTES el complemento principal de fancybox. Eso resuelve el problema.

+1

Gracias hombre. Resolvió mi problema. – aton1004

+0

No resolvió mi problema: mi página carga claramente el archivo fancybox js pero aún arroja el error "fancybox no es una función". – jimiayler

+0

@jimiayler ¿Lo cargaste después de los complementos? – doublejosh

0

Si está utilizando un complemento que incluye JQuery en su etiqueta de encabezado, este problema puede surgir. Recientemente agregué 'TheThe Slider' a mi blog, todos mis FancyBoxes dejaron de funcionar. Sin embargo, hay soluciones fáciles para esta situación. básicamente, vaya al directorio de complementos, busque la llamada a jquery y haga que su uso sea condicional. Si desea ver mi implementación de esto, hice blog about it con captura de pantalla.

1

En mi caso, era jQuery.noConflict(); remar en otro plugin jQuery ... cuando lo eliminé todo comenzó a funcionar.

2

Acabo de tener este problema, parece que algunas versiones de jQuery no son compatibles con las versiones de FancyBox, por ejemplo, Fancybox 1.3.4 tiene errores con las versiones de jQuery por debajo de 1.7 y no funciona en versiones superiores a 1.8.

0

Tengo este problema en mi sitio web de WordPress y encontré que el problema estaba sucediendo debido a fancybox.js presentando dos veces en el código de dos complementos que instalé. Así que revisa tu código y asegúrate de cargar desde una fuente.

0

soluciones posibles:

1) ha seguido ya cargados jQuery? De lo contrario, cárguelo antes de que se inicien los comandos $.

2) Compruebe, probablemente esté cargando la biblioteca jquery (.js) varias veces durante la página. Intenta cargar solo uno.

3) Al final del archivo, puede ejecutar este comando de javascript: $ = jQuery.noConflict(); y podría resolverlo. Si no, en cualquier lugar use la palabra jQuery en lugar de $, y funcionará también.