Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] wyświetlanie divów
zonkerman
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


Witam

Mam takie coś:
  1. <li id="wiz">
  2. <div id="glowne">Tutaj główne opcje</div>
  3. <div id="wiecej">Tutaj dodatkowe info</div>
  4. <div id="opcje"><a id="pokazwiecej" href="#">Więcej</a></div>
  5. </li>


I tutaj mam fragment jQuery:
Kod
$("ol#wizytowka div#wiecej").hide();

$("a#pokazwiecej").click(function(){
        $(this).prev("div#wiecej").slideToggle(500)
        return false;
           });


I nie działa mi to. Czego oczekuję:
Na początku po wczytaniu wszystkie divy#wiecej są niewidoczne (to działa). Teraz chcę, aby po kliknięciu na więcej chcę aby div#wiecej pokazywał się lub chował, ale do poszczególnego <li>. I nie wiem jak to zrobić (IMG:style_emoticons/default/sad.gif)

Ten post edytował zonkerman 19.07.2010, 17:03:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
kreciko
post
Post #2





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Musisz wiedzieć, że na stronie nie może być kilku znaczników z tym samym id. Więc chyba zamiast id="więcej" powinieneś użyć class="więcej". To się tyczy znacznika li i div w Twoim przypadku. A jak to rozwiązać? musisz pokombinować.

Ten post edytował kreciko 19.07.2010, 18:51:22
Go to the top of the page
+Quote Post
zonkerman
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


Czemu nie może być? Wtedy tylko rozdzielasz wpisując w uchwytach np a#wiecej ; p#wiecej itd. Zależy co chcesz wziąć. Kombinuje cały czas. Bo jeśli nie mam tego diva#opcje , to wtedy działa. Więc jakoś jego muszę przeskoczyć.
Go to the top of the page
+Quote Post
kreciko
post
Post #4





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Tu masz dlaczego: http://www.w3.org/TR/xhtml1/#h-4.10
Tak jest w specyfikacji. I jeżeli się odwołujesz do elementu o id=wiecej, to silnik javascripta nie wie, czasami się odwoła do jednego, czasami do drugiego, czasami do obu, a czasami nie zadziała, zależy jaka przeglądarka(jaki silnik). Ja bym to zrobił tak: "$("li#wiz").next("div#wiecej").toggle()"
Go to the top of the page
+Quote Post
zonkerman
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


Akurat u mnie nie ma kliku id. Chyba, że chodzi Ci o to, że np mam kilka wyświetlonych li. Ale może być kilka choćby dlatego (punkt 7):
http://www.webdesignerwall.com/tutorials/j...-for-designers/
Jak będzie trzeba to pominę tego <div id="opcje"> ale jednak wolałbym, aby on był. A Twój sposób jakoś nie bardzo chce działać.

Ten post edytował zonkerman 19.07.2010, 22:38:55
Go to the top of the page
+Quote Post
kreciko
post
Post #6





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Piszesz to w php, czy w html? Mógłbyś podać kontekst w którym to masz? Spróbuj swoją stronę zwalidować.
Go to the top of the page
+Quote Post
zonkerman
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


W php. Tutaj jest fragment kodu (pętla w php):

  1. <ol id="wizyt">
  2. <?php
  3. (zapytanie MySQL i trochę php)
  4. while($wynik = mysql_fetch_assoc($zapyt))
  5. { ?>
  6.  
  7. <li id="wiz">
  8. <div id="glowne">Tutaj główne opcje</div>
  9. <div id="wiecej">A tutaj dodatkowe</div>
  10. <a id="pokazwiecej" href="#">Więcej</a>
  11. </li>
  12.  
  13. <?php } i trochę skryptu php ?>
  14. </ol>

A tutaj jQuery:
Kod
$(document).ready(
    function()
    {
        $("ol#wizyt div#wiecej").hide();
        
        $("a#pokazwiecej").click(function(){
        $(this).prev("div#wiecej").slideToggle(500);        
        return false;
           });
    });


Teraz akurat nie mam możliwości zrobić walidacji, bo nie mam stronki na serwerze, tylko piszę ją lokalnie. ale może tego nie trzeba robić.
Go to the top of the page
+Quote Post
kreciko
post
Post #8





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Ja bym sobie to zprametryzował ten kod html.


Jak masz zapytanie do mysql, to pewnie zwraca Ci jakąś unikatową wartość, np. id, albo hash
  1. <ol id="wizyt">
  2. <?php
  3. (zapytanie MySQL i trochę php)
  4. while($wynik = mysql_fetch_assoc($zapyt))
  5. { ?>
  6.  
  7. <li id="<?php echo $wynik['id']; ?>">
  8. <div id="glowne">Tutaj główne opcje</div>
  9. <div id="<?php echo "d".$wynik['id'];?>">A tutaj dodatkowe</div>
  10. <a class="pokazwiecej" id="<?php echo "a"$wynik['id']?>" href="#">Więcej</a>
  11. </li>
  12.  
  13. <?php } i trochę skryptu php ?>
  14. </ol>
  15.  


a w jQuery tak:
  1. $("a.pokazwiecej").click(function(){
  2. var id = $(this).attr("id").
  3. $("div#d".id).toggle();
  4. });


Ten post edytował kreciko 20.07.2010, 10:12:46
Go to the top of the page
+Quote Post
zonkerman
post
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


Akurat tego nie chcę parametryzować (IMG:style_emoticons/default/smile.gif) To ma być stałe, dopiero dane w div'ach będą wyświetlały dane z bazy. Więc chcę, aby to wyglądało tak:
  1. <ol id="wizyt">
  2. <?php
  3. (zapytanie MySQL i trochę php)
  4. while($wynik = mysql_fetch_assoc($zapyt))
  5. { ?>
  6.  
  7. <li id="wiz">
  8. <div id="glowne">Tutaj główne dane pobrane z bazy</div>
  9. <div id="wiecej">Tutaj dodatkowe dane pobrane z bazy</div>
  10. <div id="opcje"><a id="pokazwiecej" href="#">Więcej</a></div>
  11. </li>
  12.  
  13. <?php } i trochę skryptu php ?>
  14. </ol>


Dlatego chcę, aby był ten div#opcje ,to w stylach chcę go sobie odpowiednio poformatować. Próbowałem nawet coś kombinować w prevUntil, ale też mi to nie chciało działać.
Go to the top of the page
+Quote Post
kreciko
post
Post #10





Grupa: Zarejestrowani
Postów: 99
Pomógł: 7
Dołączył: 17.02.2010

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


Sprawdziłbym jeszcze konsole błędów. Albo zrobiłbym, tak:

Zamiast tego:

  1. $(this).prev("div#wiecej").slideToggle(500);


Dałbym to:

  1. $(this).prev().prev().slideToggle(500);


ewentualnie napisać, tak jak jest tutaj:
http://api.jquery.com/prev/ - pierwszy przykład, obczaj kod.
Go to the top of the page
+Quote Post
zonkerman
post
Post #11





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


Jeśli mam:
  1. <li id="wiz">
  2. <div id="glowne">Tutaj główne opcje</div>
  3. <div id="wiecej">Tutaj dodatkowe opcje</div>
  4. <a id="pokazwiecej" href="#">Więcej</a>
  5. </li>

I w skrypcie napiszę:
  1. $(this).prev().prev().slideToggle(500);

To chowa mi div#glowne.

A jeśli mam:
  1. <li id="wiz">
  2. <div id="glowne">Tutaj główne opcje</div>
  3. <div id="wiecej">Tutaj dodatkowe opcje</div>
  4. <div id="opcje"><a id="pokazwiecej" href="#">Więcej</a></div>
  5. </li>


To nic się nie dzieje. Konsola błędów nic nie pokazuje. Nawet jak robię różne kombinacje do tego prev() tzn wpisuje tam różne div'y to i tak nie działa :/ Przykład działa, nawet na 2 .prev() , ale do swojego nie mogę użyć :/

Sposób z id też nie działa.

Ten post edytował zonkerman 20.07.2010, 16:57:23
Go to the top of the page
+Quote Post
#luq
post
Post #12





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Nie rozumiem dlaczego nie słuchasz ludzi którzy starają Ci pomóc. Musisz mieć unikalne id, taka jest idea całego atrybutu id, bo jeśli by tak nie było to czym by się różniło od atrybutu class? Zresztą atrybut id jako pole z bazy to jest marny pomysł.

Ja bym nie krył za pomocą JS`a bo jeśli nie zostanie wczytane całe drzewko DOM to ten tekst będzie widoczny co sprawi przy wolniejszych łączach efekt takiego niefajnego mrugnięcia/zniknięcia...

Nie używaj taga <a/> jeśli nie jest to link. To kłóci się z tym co ma reprezentować ten znacznik.

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <head>
  3. <title>Disable</title>
  4. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  5. <script type="text/javascript" src="./js/jquery.js"></script>
  6.  
  7. <script type="text/javascript">
  8. $(document).ready(function(){
  9. $( '#wizyt li div.opcje' ).click(function(){
  10. $(this).prev().toggle();
  11. });
  12. });
  13. </script>
  14.  
  15. <style type="text/css">
  16. #wizyt li div.wiecej { display: none; }
  17. #wizyt li div.opcje { cursor: pointer; }
  18. </style>
  19.  
  20. </head>
  21.  
  22. <ol id="wizyt">
  23. <li>
  24. <div class="glowne">Tutaj główne dane pobrane z bazy</div>
  25. <div class="wiecej">Tutaj dodatkowe dane pobrane z bazy</div>
  26. <div class="opcje">Więcej</div>
  27. </li>
  28. <li>
  29. <div class="glowne">Tutaj główne dane pobrane z bazy</div>
  30. <div class="wiecej">Tutaj dodatkowe dane pobrane z bazy</div>
  31. <div class="opcje">Więcej</div>
  32. </li>
  33. </ol>
  34.  
  35. </body>
  36. </html>
Go to the top of the page
+Quote Post
zonkerman
post
Post #13





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


Dzięki (IMG:style_emoticons/default/smile.gif) To działa. Musze tylko przerobić parę rzeczy pod siebie. Wielki dzięki.

==EDIT==
Tylko 1 problem. Jak mam w tym div#opcje linki <a> to wtedy każdy mi otwiera tego diva#wiecej . Wiec jak zrobić, aby tylko na przycisk Więcej reagował?

Ten post edytował zonkerman 20.07.2010, 22:28:18
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 21:31