Откройте iframe вместо поста - PullRequest
1 голос
/ 08 ноября 2011

У меня проблема с jQuery: когда я нажимаю Домашняя страница на изображении большого пальца, открывается фрейм, но когда я нажимаю на элемент фильтра и на большом пальце изображения, открывается сообщение. Это тесты моего сайта: [скрыто]

Почему, когда я нажимаю на фильтр, а затем на большом пальце изображения открывает сообщение вместо iframe?

Спасибо и извините за мой плохой английский!

1 Ответ

1 голос
/ 08 ноября 2011

Когда вы фильтруете элементы портфолио, они динамически восстанавливаются, поэтому ранее связанное поведение теряется (в вашем случае, событие щелчка).

Чтобы решить, что jQuery имеет событие .live () , которое присоединяет обработчик событий не только к текущим элементам DOM, но также к элементам, созданным в будущем (т.е. не создан, когда DOM был загружен, но позже).

В вашем коде .js у вас есть этот вызов:

portfolioItemsEnabled.click( function (e) {
  if(!jQuery(this).hasClass('active') && 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') && 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();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...