Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jedna klasa do kilku elementów, da się tak?
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
MadMark
Witam,
napisałem kod:

  1. function openClose(id)
  2. {
  3. if(document.getElementById)
  4. {
  5. element = document.getElementById(id);
  6. }
  7. else if(document.all)
  8. {
  9. element = document.all[id];
  10. }
  11. else return;
  12.  
  13. if(element.style)
  14. {
  15. if(element.style.display == 'block' )
  16. {
  17. element.style.display = 'none';
  18. document.getElementById(id+'_clicked').style.display = 'block';
  19. }
  20. else
  21. {
  22. element.style.display = 'block';
  23. document.getElementById(id+'_clicked').style.display = 'none';
  24. if(getElementsById(id).length > 1)
  25. {
  26. element.style.margin = "0 "+(70*getElementsById(id).length)+"0 0";
  27. }
  28. }
  29. }
  30. }
  31. #menus
  32. {
  33. -webkit-border-radius: 10px;
  34. -moz-border-radius: 10px;
  35. border-radius: 10px;
  36. background-color: orange;
  37. padding: 1px;
  38. position: absolute;
  39. left: 35%;
  40. /*margin-left: -175px;*/
  41. z-index: 101;
  42. width: 30%;
  43. text-align: center;
  44. display: none;
  45. margin-top: 50px;
  46. }
  47. #menus .menuss
  48. {
  49. -webkit-border-radius: 10px;
  50. -moz-border-radius: 10px;
  51. border-radius: 10px;
  52. background-color: black;
  53. color: silver;
  54. padding: 10px;
  55. height: 100px;
  56. }
  57. #menusss
  58. {
  59. -webkit-border-radius: 10px;
  60. -moz-border-radius: 10px;
  61. border-radius: 10px;
  62. background-color: orange;
  63. padding: 1px;
  64. position: absolute;
  65. left: 35%;
  66. /*margin-left: -175px;*/
  67. z-index: 101;
  68. width: 30%;
  69. text-align: center;
  70. display: none;
  71. margin-top: 50px;
  72. }
  73. #menusss .menuss
  74. {
  75. -webkit-border-radius: 10px;
  76. -moz-border-radius: 10px;
  77. border-radius: 10px;
  78. background-color: black;
  79. color: silver;
  80. padding: 10px;
  81. height: 100px;
  82. }
  83. <div id="menus"><div class="menuss">To jest moje znikajace okienko. (1)</div></div>
  84. <div id="menusss"><div class="menuss">To jest moje znikajace okienko. (2)</div></div>
  85.  
  86. <ul align="left" class="topnav">
  87. <li style="display:block;"><a href="java script:void(0); openClose('menus');" onClick="setTimeout('openClose(\'menus\')',5000);" id="menus_clicked">Pokaz 1</a></li>
  88. <li style="display:block;"><a href="java script:void(0); openClose('menusss');" onClick="setTimeout('openClose(\'menusss\')',5000);" id="menusss_clicked">Pokaz 2</a></li>
  89. </ul>


I teraz mam kilka problemów.
  1. Dla dwóch elementów mogłem sobie napisac klasę, ale jak to przerobić, aby klasa była jedna dla wszystkich? Bo jak będę mieć 20 takich to sobie nie dopisze 20 klas ;/
  2. Jak poprawnie zrobić, aby "okienka" pokazywały się jedno pod drugim? (próbowałem z 70*getElementsByTagName(id).length ale to nie działa) - teraz są jedno nad drugim i nawet nie wiem od czego zależy, które będzie na widoku... LUB jak zrobić, aby kolejny tekst po kliknięciu w "coś" następnego dodawał się do diva ?


Ktoś mi to wyjaśni?
Z góry dziękuję.

exclamation.gif! PS > przy fragmencie <a href="java script:void(0); nie ma spacji i nie powinno jej byc w "javascript" ale forum cenzuruje...
shpyo
Musisz dynamicznie przypisywać akcje klikalnym elementom i przekazywać im odpowiednie parametry:
Kod
function openClose(id)
{
    if(document.getElementById)
        element = document.getElementById(id);
    else if(document.all)
        element = document.all[id];
    else return;

    if(element.style) {
        if(element.style.display == 'block' ) {
            element.style.display = 'none';
            document.getElementById(id+'_clicked').style.display = 'block';
        }
        else {
            element.style.display = 'block';
            document.getElementById(id+'_clicked').style.display = 'none';
        }
    }
}

//pobieramy wszystkie <a> na które będziemy klikać
var a = document.getElementsByClassName('ak');
for( var i=0,al=a.length; i<al; i++ ) {
    //dla każdego <a> przypisujemy kliknięcie
    a[i].onclick = function() {
        var id = this.getAttribute("id").split('_')[0]; //nasze ID
        openClose( id );
        setTimeout('openClose(\''+ id +'\')',5000);
    }
}


Wtedy LI ma postać:
  1. <li style="display:block;"><a class="ak" href="java script:void(0);" id="menus_clicked">Pokaz 1</a></li>
  2. <li style="display:block;"><a class="ak" href="java script:void(0);" id="menusss_clicked">Pokaz 2</a></li>
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.