Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Изменить таб-меню [2]
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Изменить таб-меню

Страниц (2): « 1 [2]
 

16. dropoff - 01 Марта, 2012 - 23:21:23 - перейти к сообщению
Вкладки переключает, но вот если перейти, например, site.ru/product.php?id=50#reviews, то вкладку эту не открывает(
17. IllusionMH - 02 Марта, 2012 - 01:39:55 - перейти к сообщению
dropoff, долго писал длинный пост... в итоге случайно перечитал последнее сообщение и осенило
нужно чтобы ссылка была вида site.ru/product.php?id=50#reviews-tab (внимательно посмотрите на адресную строку при обычном переключении)

там же в исходнике он ко всем ссылкам добавляет -tab в конце
CODE (javascript):
скопировать код в буфер обмена
  1.  $(this).attr('href',$(this).attr('href') + '-tab');

а потом убирает последние 4 символа, когда ищет нужный контейнер
CODE (javascript):
скопировать код в буфер обмена
  1. hash = hash.substring(0,hash.length-4);
18. tuareg - 02 Марта, 2012 - 02:22:14 - перейти к сообщению
А с чего он должен ее открыть?
Чтобы он ее открыл надо сделать как-то так ...
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(function(){
  3.   var
  4.     hash=window.location.hash || '', //hash
  5.    //сразу запомним все переменные чтобы потом их не искать
  6.     $menu=$('#menu'),
  7.     $content=$('.content'),
  8.     $aTabs=$('a.tabs'),// все ссылки
  9.     $thisA,// это будет ссылка
  10.     $thisTab;// это будет вкладка
  11.     menu.on('myTab',function(event,id,elem){//заменить на on('myTab',...) jQuery>1.7
  12.        $thisA=$(elem);
  13.        $thisTab=$(id);
  14.        //прячем все блоки с контентом    
  15.        $content.css('display','none');
  16.        //отображаем нужный блок
  17.        $thisTab.css('display','block');
  18.        //устанавливаем класс на текущий таб и снимаем со всех элементов li класс active      
  19.        $thisA.parent().addClass('active').siblings().removeClass('active');
  20.   });
  21.   $aTabs.click(function(event){
  22.        //запрещаем переход по ссылке
  23.        event.preventDefault();
  24.        menu.trigger('myTab',[this.href.hash,this]);
  25.   });
  26.   /*если hash есть*/
  27.    if(hash!==''){
  28.     /*перебираем все ссылки*/
  29.      $aTabs.each(function(){
  30.        /*если хэши совпали вызываем обработчик myTab*/
  31.        if(this.href.hash===hash){
  32.         menu.trigger('myTab',[hash,this]);
  33.         return false;
  34.        }
  35.      });
  36.    }
  37. });
  38.  

При клике на ссылку с хэшем будет "засоряться" история т.е при клике вперед/назад будет меняться хэш. Чтобы и это отследить надо смотреть(отлавливать) еще и событие onhashchange.
Про него можете почитать
http://www[dot]xiper[dot]net/manuals/htm[dot][dot][dot]nhashchange[dot]html -->само событие
http://benalman[dot]com/projects/jqu[dot][dot][dot]shchange-plugin/ --> плагин для его эмуляции в браузерах его не поддерживающих
19. IllusionMH - 02 Марта, 2012 - 02:57:34 - перейти к сообщению
tuareg, ну скрипт та откроет вкладку.
При загрузке страницы выполняется функция tabify, в ней есть код
CODE (javascript):
скопировать код в буфер обмена
  1. if(location.hash){
  2.   handleHash();
  3. }


P.S. Недавно писал свой велосипед с вкладками Хм
Спасибо за строку
CODE (javascript):
скопировать код в буфер обмена
  1.  $thisA.parent().addClass('active').siblings().removeClass('active')

возможно пригодится при рефакторинге Улыбка
20. tuareg - 02 Марта, 2012 - 03:08:12 - перейти к сообщению
Тут хозяин барин. Улыбка я на счет использовать плагин или эту ф-ю.
onhashchange все равно придется цеплять. Подключать его к плагину или просто чуток переделать здесь решать ТС.
21. dropoff - 03 Марта, 2012 - 08:04:25 - перейти к сообщению
IllusionMH, да, видел. я убирал как раз это, чтобы -tab не добавляло
Но проблема в том, что не работает если ссылка прописана. так то меню это работает нормально, но как писал ранее, если не прописать полный путь к странице в href атрибут, то меня на главную перекидывает.

tuareg, Ваш вариант не заработал совсем.
22. IllusionMH - 03 Марта, 2012 - 15:19:34 - перейти к сообщению
dropoff, смотрите что вы там изменили, ибо копипаст кода из первого сообщения отлично работает на ссылках вида
forum/viewtopic.php?id=1&p=2#contentGuestbook-tab
Ссылку на рабочий пример отправил в лс
23. dropoff - 03 Марта, 2012 - 15:36:48 - перейти к сообщению
Дак понятно что он работает) Я же не об этом писал.
У меня проблема в том, что нужно указывать ПРЯМУЮ ссылку в табах

Так
CODE (html):
скопировать код в буфер обмена
  1. <ul id="menu">
  2.     <li class="active"><a href="#contentHome">Home</a></li>
  3.     <li><a href="#contentGuestbook">Guestbook</a></li>
  4.     <li><a href="#contentLinks">Links</a></li>
  5. </ul>

У меня НЕ работает. При клике на любой таб, перекидывает на главную, потому как ссылка там выглядит site.ru/#contentLinks, когда должна быть site.ru/prod.php?id=5#contentLinks

Я же хотел сделать так
CODE (html):
скопировать код в буфер обмена
  1. <ul id="menu">
  2.     <li class="active"><a href="http://site.ru/prod.php?id=5#contentHome">Home</a></li>
  3.     <li><a href="http://site.ru/prod.php?id=5#contentGuestbook">Guestbook</a></li>
  4.     <li><a href="http://site.ru/prod.php?id=5#contentLinks">Links</a></li>
  5. </ul>

Чтобы УРЛ страницы уже БЫЛ в href'е таба.

Уже который раз об этом пишу, но меня не слышат видимо Радость
24. IllusionMH - 03 Марта, 2012 - 15:51:43 - перейти к сообщению
Ну любая ссылка не из списка там табов - спокойно работала.
Вот этот код у меня заработал как нужно. Добавил комментарии к измененным строкам
Спойлер (Отобразить)

 

Powered by ExBB FM 1.0 RC1