Я работал над прототипом для веб-сайта клиента и столкнулся с довольно серьезной проблемой. Вы можете посмотреть прототип здесь .
Как вы можете видеть, как это работает, вы можете прокрутить набор слайдов по горизонтали и, щелкнув по одному, открыть стек, содержащий еще больше слайдов. Если затем снова щелкнуть изображение в этом стеке, оно откроет лайтбокс. Нажатие на другой стек или кнопка закрытия закроет этот стек (и откроет другой, в зависимости от обстоятельств).
Это все прекрасно работает. Однако вы получите странное поведение, если сделаете следующее:
- Нажмите, чтобы открыть любой стек.
- Нажмите, чтобы открыть световую коробку изображения (это лучше всего работает, если щелкнуть изображение, которое находится на уровне основного списка).
- Закройте световую коробку и стопку, нажав кнопку закрытия или щелкнув другую стопку.
- Нажмите обратно на первый стек. Вместо того, чтобы снова открывать стек, вы получаете лайтбокс.
Это смущает меня, так как лайтбокс должен вызываться только в том случае, если есть класс, содержащий UL
, и этот класс удаляется, когда лайтбокс закрывается. Я проверил и дважды проверил это, оно определенно отсутствует.
Вот соответствующие функции:
$("ul.hide a.lightbox").live("click",function(){
$("ul.show").removeClass("show").addClass("hide");
$(this).parent().parent().removeClass("hide").addClass("show");
$("ul.hide").animate({opacity: 0.2});
$("ul.show").animate({opacity: 1});
$("#next").animate({opacity: 0.2});
$("#prev").animate({opacity: 0.2});
return false;
});
$("ul.show a.lightbox").live("click",function(){
$(this).fancybox().trigger("click");
return false;
});
Как видите, для того, чтобы лайтбокс назывался, содержащий UL
имеет , чтобы иметь класс show
. Однако, если вы проверите его с помощью Firebug, он не будет.
Для любопытных добавлен .trigger("click");
, потому что для запуска лайтбокса потребуется двойной щелчок.
Есть идеи, как это исправить?