Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] niedziałający aktywny link w menu
Forum PHP.pl > Forum > Przedszkole
lamcpp
Problem: mam menu, które jest listą nieuporządkowaną i chciałbym by po kliknięciu w jedną z pozycji menu, został ustawiony na niej kolor czerwony i zwiekszona czcionka - słowem chce by aktywny link był cały czas widoczny i różnił się od pozostałych linków. Problem jest jednak taki, że: mój kod jquery ustawia aktywny link taki jak chce, jednak kłopot w tym ze wtedy po kliknięciu na ten link nie przenosi mnie do strony z odnosnikiem - poprostu nie zostaje wykonana zadna akcja. Dlaczego:(?
kod html:
  1. <ul>
  2. <li class="hover-width1"><a href="ss.html">STRONA GŁÓWNA</a></li>
  3. <li class="hover-width3"><a href="ss2.html">OFERTA</a></li>
  4. <li class="hover-width3"><a href="ss3.html">CENNIK</a></li>
  5. <li class="hover-width2"><a href="ss4.html">PRZEPISY</a></li>
  6. </ul>

Kod jquery:
  1. $(function() {
  2. $('li a').click(function(e) {
  3. e.preventDefault();
  4. var $this = $(this);
  5. $this.closest('ul').children('li').removeClass('inny');
  6. $this.parent().addClass('inny');
  7. });
  8. });


Jak widać kod jquery daje klasę .inny - kod działa poprawnie jesli chodzi o ustawianie aktywnego linku, jednak powoduje że po kliknięciu na jakikolwiek z linków nie zostaje wykonana zadna akcja - nie przenosi mnie do zadnego linku:(
CuteOne
Poza tym, że skrypt nie działa bo włączyłeś "preventDefault" całość kodu masz do kitu - po przeniesieniu na inną stronę wszystko wróci do stanu startowego. Innymi słowy po kliknięciu w link klasa inny nie będzie ustawiona smile.gif
lamcpp
A można prosić o podpowiedź jak to lepiej zrobić?
CuteOne
- po stronie PHP podczas generowania strony
- w JS pobierać adres i na jego podstawie zmieniać klasy
- w JS za pomocą AJAX pobierać treść z podanego linku i zapisywać go do contentu strony
Sephirus
Użyć PHP wink.gif

Można wtedy sprawdzić jaki jest adres i w PHP nadpisać klasę czy styl danego LI. Dla ułatwienia można wysyłać coś GETem wink.gif

Lub pobawić się JavaScriptem na wesoło wink.gif

Zasada jest prosta (według twojego kodu):

Jeżeli w adresie strony na końcu jest "ss.html" to jesteśmy na STRONIE GŁÓWNEJ
jeżeli "ss2.html" to na OFERCIE itd...

Można po załadowaniu strony poprzez JS i wyrażenia regularne (Patrz obiekt String i metody match, oraz obiekt RegExp) sprawdzić na jakiej podstronie jesteśmy i wtedy na sztywno danemu LI ustawić klasę "inny". Można też być sprytniejszym jeszcze i użyć metody split wink.gif

Przykład dla strony głównej:

  1. <ul id="menu">
  2. <li class="hover-width1"><a href="ss.html">STRONA GŁÓWNA</a></li>
  3. <li class="hover-width3"><a href="ss2.html">OFERTA</a></li>
  4. <li class="hover-width3"><a href="ss3.html">CENNIK</a></li>
  5. <li class="hover-width2"><a href="ss4.html">PRZEPISY</a></li>
  6. </ul>
  7.  
  8. <script type="text/javascript">
  9. // <![CDATA[
  10.  
  11. var adres = window.location.href;
  12.  
  13. var czesci_adresu = adres.split('/');
  14.  
  15. var podstrona = czesci_adresu.pop();
  16.  
  17. var podstrony = ['ss.html':0,'ss2.html':1,'ss3.html':2,'ss4.html':3];
  18.  
  19. document.getElementById('menu').getElementsByTagName('li')[ podstrony[podstrona] ].className = 'inny';
  20.  
  21. // ]]>


Analizę skryptu pozostawiam Tobie wink.gif

HTH! wink.gif
lamcpp
Próbowałem zmodyfikować kod na:
  1. $(document).ready(function(){
  2. $(function(){
  3. $("a").click(function(){
  4. $(this).parent().addClass('inny').siblings().removeClass('inny');
  5. });
  6. });
  7. });


ale teraz działa tak, że jesli elementy mają jako a href="#" to działa dobrze, jeśli natomiast mają a href="ss.html" bądź jakaś inna strona to po przeniesieniu na tą stronę pozycje menu nie są zaznaczone:(
Prosiłbym o pomoc w temacie, jak to zrobić by działało również po przejsciu do innych stron - nie używając PHP
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.