Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rozsuwane menu wielopoziomowe., Pomoc z skrypcie
Leon1409
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.05.2015

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


Witam serdecznie,
Chciałem stworzyć sobie na stronie wielopoziomowe rozwijane menu oparte na znacznikach ul i li.
Mam jednak problem, gdyż rozwija mi się tylko pierwszyy poziom drzewa, następnego nie mogę otworzyć żadnym sposobem.
Wiem, że pewnie nie jest to super trudne ale uczę się dopiero JS i byłbym wdzięczny jakąkolwiek pomoc.

Podaję to co mam, nie jest tego za dużo, ale zawsze coś:

  1. $(document).ready(function () {
  2. $('li ul').hide()
  3. $("li").click(function () {
  4. $('li > ul').not($(this).children("ul").toggle()).hide();
  5. });
  6. });


Najpierw ukrywam wszystko, a potem za pomocą toggle() ukrywam/pokazuje potomka, problem w tym, jak mam "złapać" potomka potomka?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
Comandeer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Kod
not($(this).children("ul").toggle())

Nie bardzo rozumiem co ten fragment ma robić…
Go to the top of the page
+Quote Post
rad11
post
Post #3





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


https://jsfiddle.net/tyjp7rw5/1/

Przydalo by sie tu dodac lvl i podmiane po kliknieciu ale to zostawie juz Tobie (IMG:style_emoticons/default/wink.gif)

Ten post edytował rad11 18.05.2015, 20:07:34
Go to the top of the page
+Quote Post
Comandeer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


@rad11 przekombinowane. Poza tym nie zachowujesz struktury drzewka.
Można to łatwo oprzeć na event delegation: https://jsfiddle.net/Comandeer/89pLuu3L/5/
Go to the top of the page
+Quote Post
rad11
post
Post #5





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


Fakt (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Leon1409
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.05.2015

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


Super, działa prawie tak jak chciałem z tą różnicą, że u Ciebie Comandeer menu rozwija się również jak kliknę "A", u mnie natomiast tylko jak trafię na znak punktora.

Jakieś sugestie?
Go to the top of the page
+Quote Post
Comandeer
post
Post #7





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


A masz jakieś span czy coś wewnątrz tego li?
Go to the top of the page
+Quote Post
Leon1409
post
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.05.2015

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


Nie mam, strona stoi na wordpressie i do tego li zostało automatycznie podporządkowane jakieś tam id typu "menu-item-12".

Poczytam bo to pewnie coś w css.

Dzięki za pomoc (IMG:style_emoticons/default/smile.gif)

EDIT: Usunąłem wszystkie style i wciąż rozsuwanie nie działa gdy nacisnę na tekst, wie ktoś dlaczego?
Mam w środku tego <li> jeszcze <a> ale puste, bo w taki sposób w Wordpressie uzyskałem efekt rozwijanego menu, znaczy dodaje stronę i usuwam z niej adres, potem podpinam pod nią inne podstrony i mam strukturę drzewa jednak znacznik <a> pozostaje. Macie może jakiś pomysł?

Ten post edytował Leon1409 19.05.2015, 13:54:01
Go to the top of the page
+Quote Post
Comandeer
post
Post #9





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Jeśli w tym li jest a, to klikając na tekst klikasz na link, a nie element listy. Z tego powodu mój skrypt nie działa. Musisz sprawdzać czy e.target to li - jeśli nie, to pobierz jego rodzica i wówczas powinno działać
Go to the top of the page
+Quote Post
Leon1409
post
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.05.2015

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


  1. if ( e.target.is( "li" ) )
  2. {
  3. var li = e.target
  4. jQuery(li).children('ul').toggle();
  5. } else
  6. ...
  7.  

Coś takiego?
Nie wiem za bardzo co rozumiesz przez pobranie rodzica, a to powinno być w miejscu kropek,prawda?
Go to the top of the page
+Quote Post
Comandeer
post
Post #11





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Raczej coś typu:
Kod
var target = $(e.target)
,li = target.is('li') ? target : target.parent('li');
li.children('ul').toggle();

Go to the top of the page
+Quote Post
Leon1409
post
Post #12





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.05.2015

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


Pogubiłem się,

W którym miejscu powinienem to sprawdzać?

  1. $(document).ready(function()
  2. {
  3. jQuery('li ul').hide()
  4. $('.menu').on('click', function(e)
  5. {
  6. var li = e.target; ///zamiast tych 2 linijek?
  7. $(li).children('ul').toggle();
  8. });
  9. });
  10.  
Go to the top of the page
+Quote Post
Comandeer
post
Post #13





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Tsk, zamiast nich.
Go to the top of the page
+Quote Post
Leon1409
post
Post #14





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.05.2015

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


Dobra wielkie dzięki za zaangażowanie, wszystko działa jak chciałem:)



A gdybym chciał zrobić coś takiego, że każdy z elementów jest linkiem prowadzącym do konkretnej podstrony a po przejściu i wczytaniu podstrony widoczne zostają jego dzieci( czyli ta gałąź zostaje rozwinięta)

W ogóle to co możecie polecić do nauki js? Jakieś tutoriale i kursy online czy raczej zaopatrzyć się w jakąś lekturę papierową?
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: 15.09.2025 - 14:03