#jquery #filter
#jquery #Фильтр
Вопрос:
У меня проблема с jQuery: когда я нажимаю на домашнюю страницу на изображении большого пальца, открывается iframe, но когда я нажимаю на элемент фильтра и на изображение большого пальца, открывается сообщение. Это тесты моего веб-сайта: [скрыто]
Почему, когда я нажимаю на фильтр, а затем на изображение, большой палец открывает post вместо iframe?
Спасибо и извините за мой плохой английский!
Комментарии:
1. Кажется, что при фильтрации элементов портфолио привязанное поведение теряется. В вашем JS есть строка, прокомментированная с помощью
/* When a portfolio item is clicked */
. Есть ли там, где вы указываете элементам портфолио открывать тот «iframe», который вы говорите? Если это так, и я здесь просто предполагаю, попробуйте изменить этот вызовportfolioItemsEnabled.click( function (e) {
на что-то вроде этого:$('#portfolio-items.enabled li').live("click", function(e) {
2. @scumah Я пытался, но это не работает! и затем с этим зависает зыбучий песок, и Firebug выдает мне эту ошибку:
Uncaught TypeError: Property '$' of object [object DOMWindow] is not a function
. В любом случае, большое вам спасибо!3. @scumah произошла небольшая ошибка, я заменил
$
наjQuery
, и теперь это работает. Большое вам спасибо, мерзавцы!4. Нет проблем, я опубликую это как более расширенный ответ, если вы не возражаете: P
Ответ №1:
Когда вы фильтруете элементы портфолио, они восстанавливаются динамически, поэтому ранее привязанное поведение теряется (в вашем случае, событие щелчка).
Чтобы решить эту проблему, в jQuery есть событие .live(), которое привязывает обработчик события не только к текущим элементам DOM, но и к элементам, созданным в будущем (т. Е. созданным не при загрузке DOM, а позже).
В вашем коде .js у вас есть этот вызов:
portfolioItemsEnabled.click( function (e) {
if(!jQuery(this).hasClass('active') amp;amp; jQuery(this).hasClass('visible')) {
portfolioItems.removeClass('active');
jQuery(this).addClass('active');
portfolioItems.not('.active').find('.overlay').css({ display: 'none' });
var postId = jQuery(this).attr('id').split('portfolio-')[1];
tz_getPortfolio(postId);
}
e.preventDefault();
});
И для того, чтобы это работало в любое время, даже когда загружаются новые / разные элементы портфолио, вы должны изменить вызов следующим образом
jQuery('#portfolio-items.enabled li').live("click", function(e) {
if(!jQuery(this).hasClass('active') amp;amp; jQuery(this).hasClass('visible')) {
portfolioItems.removeClass('active');
jQuery(this).addClass('active');
portfolioItems.not('.active').find('.overlay').css({ display: 'none' });
var postId = jQuery(this).attr('id').split('portfolio-')[1];
tz_getPortfolio(postId);
}
e.preventDefault();
});