Подтвердить что ты не робот

Fancybox не является функцией

Здравствуйте, я использую jQuery plugin fancybox для отображения бинговых карт, когда кто-то вводит адрес в текстовое поле и нажимает кнопку отправки рядом с ним. И загружается fancybox, и отображается карта для этого адреса. Это хорошо работает с моим приложением, но проблема в том, что он работает только на одной странице, а с другой, когда я загружаю его, он дает мне ошибку, говоря, что fancybox не является функцией. Я вижу эту ошибку в консоли ошибок и в консоли firebug. Я не знаю, в чем проблема. Тот же код работает на другой странице, но не на этом?

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

Я уверен, что это не проблема повторного использования. Но когда я проверяю, загружены ли оригинальные файлы fancybox, они загружаются с dom, поэтому это может быть не актуальной проблемой. Но я не могу понять, что еще может быть проблемой.

Это мой код

abbr: это просто текстовый бит. У меня есть разные div, основанные на том, что пользователь выбирает. И каждый div будет иметь свои собственные элементы управления, которые начинаются с этого текста и добавляются с их собственными определениями, такими как mapresults, decValLat, decValLon и т.д.

ex: abbr → восток а затем идентификаторы будут eastmapresults, eastdecValLat, 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();    
};
4b9b3361

Ответ 1

У меня уже был этот тип ошибок, потому что я перезагружал jQuery после импорта плагина, проверяя, что вы не ошибаетесь reimport jquery (иногда включаются в пакет, например, инструменты jQuery).

Ответ 2

Вам нужно загрузить расширения, такие как easing.js и mousewheel.js ПЕРЕД основным плагином fancybox. Это решает проблему.

Ответ 3

Если "fancybox" как функция не существует, вероятно, что источник jQuery или источник плагина не загружается на вашу страницу. Убедитесь, что путь, имена файлов и расширение указаны правильно.

РЕДАКТИРОВАТЬ: Убедитесь, что вы ссылаетесь на источник jQuery, прежде чем ссылаться на какие-либо плагины. Если плагин загружается в ваш HTML перед jQuery, плагин не работает.

Ответ 4

У меня просто была эта проблема, похоже, некоторые версии jQuery несовместимы с версиями FancyBox, например, Fancybox 1.3.4 работает с версиями jQuery ниже 1.7 и не работает с версией выше 1,8.

Ответ 5

В моем случае это был jQuery.noConflict(); строка в другом плагине jQuery... когда я удалил все, котор начали работать.

Ответ 6

Если вы используете плагин, который включает JQuery в свой тег заголовка, эта проблема может возникнуть. Недавно я добавил "The The Slider" в свой блог, все мои FancyBoxes перестали работать. Однако для этой ситуации есть легкие исправления. в основном, перейдите в каталог плагина, найдите вызов jquery и сделайте его условным. Если вы хотите увидеть мою реализацию этого, я сделал блог об этом с захватом экрана.

Ответ 7

Я получил эту проблему на своем веб-сайте WordPress, и я обнаружил, что проблема произошла из-за fancybox.js, представленного дважды в коде из двух подключаемых модулей. Поэтому проверьте свой код и убедитесь, что он загружается из одного источника.

Ответ 8

Возможные решения:

1) Вы уже загрузили jQuery? Если нет, загрузите его, прежде чем запускать команды $.

2) Проверьте, возможно, вы загружаете jquery library (.js) несколько раз во время страницы. Попробуйте загрузить только один.

3) В конце файла вы можете выполнить эту команду javascript: $ = jQuery.noConflict();, и это может решить. Если нет, то где-нибудь используйте слово jQuery вместо $, и оно тоже будет работать.