Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jquery] niedziałający aktywny link w menu
lamcpp
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

Ostrzeżenie: (0%)
-----


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:(
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
lamcpp
post
Post #3





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

Ostrzeżenie: (0%)
-----


A można prosić o podpowiedź jak to lepiej zrobić?
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


- 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
Go to the top of the page
+Quote Post
Sephirus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
lamcpp
post
Post #6





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:00