Проблема с областью JavaScript: функция доступна в $ (doc) .ready (), но не в обработчике событий - PullRequest
0 голосов
/ 29 декабря 2011

Я использую сторонний скрипт , чтобы добавить функцию масштабирования к изображениям на странице. Это хорошо работает со статическим, но не с динамическим контентом.

Статическая версия, работает:

$(document).ready(function(){ 
    $('#gallery_main_img').addpowerzoom();
})

Динамическая версия, не работает:

$(document).ready(function(){ 
    $('#gallery_main_img').load(OnGalleryImageChanged);
})

function OnGalleryImageChanged() {
    $('#gallery_main_img').addpowerzoom();
}

Функция addpowerzoom создается с помощью этого кода в скрипте PowerZoom, на который ссылается <head> моей страницы:

$.fn.addpowerzoom=function(options){ 
    // function content here
}

При входе в обработчик событий Firebug выдает мне следующее сообщение об ошибке:
$("#gallery_main_img").addpowerzoom is not a function.

Так что, похоже, проблема в объеме. Мой вопрос:

Как получить доступ к функции addpowerzoom () из моего обработчика событий?

1 Ответ

2 голосов
/ 29 декабря 2011

Если вы проверите этот источник скрипта стороннего производителя , первое, что вы заметите, это сделает jQuery в режиме noConflict , с кодом jQuery.noConflict(), и он не 'Также нельзя присвоить его переменной, то есть $ больше не зарезервирован для jQuery.

Поскольку вы упомянули, что первый случай работает, я предполагаю, что у вас есть готовый оператор, прежде чем вы включитеСторонний скрипт, потому что иначе это тоже не сработало бы.

Вы можете либо изменить свой код на этот (заменив $ на jQuery):

jQuery(document).ready(function(){ 
    jQuery('#gallery_main_img').load(OnGalleryImageChanged);
})

function OnGalleryImageChanged() {
    jQuery('#gallery_main_img').addpowerzoom();
}

пример: http://jsfiddle.net/niklasvh/8Vjnu/

или оберните код внутри:

(function($) { 
  $(function() {
    // more code using $ as alias to jQuery
  });
})(jQuery);

или, возможно, удалите noConflict из стороннего скрипта вообще (то, что автор никогда не должен был вставлять впервое место, если только они не предполагают, что каждый, кто использует скрипт, хочет удалить jQuery из $).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...