Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Sekcyjne ukywanie pól formularza
The Night Shadow
post 9.04.2009, 08:00:00
Post #1





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Mam formularz podzielony na sekcje za pomocą fieldset. Jak za pomocą JS sprawić, by po kliknięciu w LEGENDĘ danej sekcji tag DL znajdujący się wewnątrz zmieniał styl na display: none; i odpowiednio block w przypadku, gdy już był ukryty?

Chodzi mi o uniwersalny skrypt bez koneiczności nadawania ID każdemu DL i FIELDSET.

  1. <fieldset><dl>TU SĄ POLA FORMULARZY</dl></fieldset>


Klikamy w fieldset i dl znika. Klikamy ponownie i DL pojawia się.


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
bluesqad
post 9.04.2009, 08:14:00
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 6
Dołączył: 25.06.2007
Skąd: Olkusz

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


Może to pomoże:

http://ferrante.pl/2007/02/27/praktyczne-w...o-javascript-3/


--------------------
Studio Yaso.pl | | | | | | | | | | => 40%
Go to the top of the page
+Quote Post
The Night Shadow
post 9.04.2009, 09:15:58
Post #3





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Zauważ, że mowa tu o identyfiaktorach, a ja wyraźnie napisałem: "Chodzi mi o uniwersalny skrypt bez koneiczności nadawania ID każdemu DL i FIELDSET."

Wiem, że chodzi o skrypty związane z getElementByTagName, ale nie bardzo potrfię to co wiem wykorzystać w praktyce.

Łopatologicznie powinno to funkcjonować tak:

Podajemy w funkcji id formularza. Funkcja pobiera z tego formularza wszystkie tagi FIELDSET, a następnie dodaje do nich zdarzenie ONCLICK, które warunkuje pokazanie / ukrycie elementów DL znajdujących się w fieldset. chociaż to też nie do końca, bo zdarzenie onclick powinno dotyczyć legendy w fieldset.

Zrobiłem coś takiego:

  1. <form action="" method="post" id="formularz">
  2. <legend>Część pierwsza</legend>
  3. <dl>
  4. <dt>Pierwsze pole</dt>
  5. <dd><input type="text" name="pierwsze_pole" alue="" /></dd>
  6. <dt>Drugie pole</dt>
  7. <dd><input type="text" name="drugie_pole" alue="" /></dd>
  8. </dl>
  9. <legend>Część druga</legend>
  10. <dl>
  11. <dt>Trzecie pole</dt>
  12. <dd><input type="text" name="trzecie_pole" alue="" /></dd>
  13. <dt>Czwarte pole</dt>
  14. <dd><input type="text" name="czwarte_pole" alue="" /></dd>
  15. </dl>
  16. </form>
  17.  
  18. <script type="text/javascript">
  19.  
  20. function aktywacja_ukrywania_formularza ( id )
  21. {
  22. this.id = id;
  23.  
  24. var tagi_fieldset = document.getElementById(id).getElementsByTagName('fieldset');
  25.  
  26. for (var n = 0; n < tagi_fieldset.length; ++n)
  27. {
  28. var tagi_dl = tagi_fieldset[n].getElementsByTagName('dl');
  29. var tag_legend = tagi_fieldset[n].getElementsByTagName('legend');
  30.  
  31. tag_legend[0].onclick = function () { for (var m = 0; m < tagi_dl.length; ++m) { if ( tagi_dl[m].style.display == 'none' ) { tagi_dl[m].style.display = ''; } else { tagi_dl[m].style.display = 'none'; } } };
  32. }
  33. }
  34.  
  35. aktywacja_ukrywania_formularza ( 'formularz' );
  36.  


Problem jednak polega na tym, że ukrywane jest tylko ostatnie dl, ponieważ do funkcji w onclick wędrują zmienne nadpisywane w kolejncyh krokach for.

Co z tym zrobić?


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
piotrooo89
post 9.04.2009, 09:42:25
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ja zrobiłem w jQuery coś takiego: klikasz raz znika, klikasz 2x pojawia się:

  1. <script type="text/javascript" src="jquery.js"></script>
  2.  
  3. <script type="text/javascript">
  4. $(document).ready(function()
  5. {
  6. $('fieldset').click(function ()
  7. {
  8. $(this).children('dl').hide();
  9. return true;
  10. });
  11. $('fieldset').dblclick(function ()
  12. {
  13. $(this).children('dl').show();
  14. return true;
  15. });
  16. });
  17.  
  18.  
  19. <form action="" method="get">
  20. <legend>Część pierwsza</legend>
  21. <dl>
  22. <dt>Pierwsze pole</dt>
  23. <dd><input type="text" name="pierwsze_pole" value="" /></dd>
  24. <dt>Drugie pole</dt>
  25. <dd><input type="text" name="drugie_pole" value="" /></dd>
  26. </dl>
  27. <legend>Część druga</legend>
  28. <dl>
  29. <dt>Trzecie pole</dt>
  30. <dd><input type="text" name="trzecie_pole" value="" /></dd>
  31. <dt>Czwarte pole</dt>
  32. <dd><input type="text" name="czwarte_pole" value="" /></dd>
  33. </dl>
  34. </form>


Ten post edytował piotrooo89 9.04.2009, 09:43:42


--------------------
Go to the top of the page
+Quote Post
The Night Shadow
post 9.04.2009, 09:57:23
Post #5





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


No to już jest blisko tylko że ja chciałbym, by klikało się w legend. Zauważ, że na FF możesz kliknąc w pole fomularza które jest w fieldset i fieldset znika.

Poza tym chciałbym, by nie trzeba było kliakć dwa razy by pokazać pola.

Wypłodziłem coś takiego i działa :- )

  1. <?php
  2. <script type="text/javascript">
  3.  
  4.   $(document).ready(function()
  5.   {
  6.      $('fieldset').children('legend').click(function ()
  7.      {
  8.         if ( $(this).parent().children('dl').css("display") == 'none' )
  9.         {
  10.            $(this).parent().children('dl').show();
  11.         }
  12.         else
  13.         {
  14.            $(this).parent().children('dl').hide();
  15.         }
  16.         return true;
  17.      });
  18.   });
  19.  
  20. </script>
  21. ?>


Ten post edytował The Night Shadow 9.04.2009, 10:17:37


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
piotrooo89
post 9.04.2009, 10:35:09
Post #6


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




a ja jeszcze zoptymalizowałem (bo zapomniałem o tej funkcji :| )

  1. <script type="text/javascript">
  2. $(document).ready(function()
  3. {
  4. $('legend').click(function ()
  5. {
  6. $(this).next().toggle();
  7. return true;
  8. });
  9. });


--------------------
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 Wersja Lo-Fi Aktualny czas: 15.08.2025 - 03:32