Мне интересно, возможно ли использовать jQuery bind () для запуска пользовательского события при вызове произвольной функции.Примерно так:
/* when cmsPlugin.func() is called, fire myCustom.func() too */
$.bind( cmsPlugin.func, myCustom.func );
Мы используем плагин Lightbox2 для Drupal на сайте.
Когда отображается лайтбокс, я хочу запустить какой-то пользовательский код, который будет прикрепляться к кликам нассылка «скачать» в Lightbox.
Плагин Lightbox2, по-видимому, не вызывает $ .trigger (), поэтому у меня есть несколько вариантов -
- Найти способпривязка к вызовам функций JavaScript.(В этом случае Lightbox.end, я полагаю.)
- Использовать существующее событие, например, $ (document) .ready, которое может (?) Запускаться как часть отображения лайтбокса.
- Расширьте существующую функцию, добавив вызов $ .trigger ().
- Просто несколько раз ударьте myCustom.func () некоторое время после того, как обнаружите, что щелкающий элемент лайтбокса был нажат.(Ewww.)
- __ _ __ _ __ ?
Решение
Я попытался упростить свой вопрос с помощью cmsPlugin.func / myPlugin.func, но думаю, что мог запутаться в этом.Тем не менее, я надеюсь, что опубликованные решения будут достаточно общими для будущих читателей, чтобы они могли сами себя использовать.
Спасибо Адаму и Лучо.Мне не повезло с предложением Лучо, но я подозреваю, что это была моя вина, а не Лучо:)
Сначала я попробовал пример кода Лучо, модифицировав его для запуска Drupal.zipcart.init ()когда Lightbox.updateNav был выполнен.Это не сработало для меня.
Я решил расширить Lightbox.updateNav (), потому что это была простая функция, вызываемая поздно в методе отображения Lightbox2.
Моя попытка изменить код Лучо выглядела каквот так, но не сработало -
// NOT THE RIGHT SOLUTION (for me)
Lightbox.updateNav = function(_dz, _lb) { return function() {
_lb.updateNav();
_dz.init();
};
}(Drupal.zipcart, Lightbox);
Вот код, который я в итоге использовал, основываясь на ответе Адама, который позволяет модулям Drupal ZipCart и Lightbox2 играть хорошо вместе, делая ссылки с class = "zipcart" в лайтбокс правильно добавить файлы в корзину загрузки.
(function(){
var _updateNav = Lightbox.updateNav;
Lightbox.updateNav = function () {
$(document).bind('lightbox.updateNav', function() {
Drupal.zipcart.init();
});
$("#lightbox").trigger('lightbox.updateNav');
_updateNav.apply(this, arguments);
}
})();
$(document).bind('lightbox.updateNav', function () { Drupal.zipcart.init(); });