Avatar billede nemlig Professor
24. juni 2024 - 22:50 Der er 4 kommentarer

Vis og skjul sektioner - virker kun på den første sektion

Hejsa.
Jeg har denne kode, som jeg benytter, når jeg vil have mulighed for at skjule og vise en sektion i html-koden.
Koden virker kun på den første sektion. Jeg har nederst vist et eksempel, hvor jeg har 2 sektioner, som jeg gerne vil kunne vise og skjule uafhængigt af hinanden.
Nogen forslag til løsning?

<script type="text/javascript">
    $(function(){
      $("#settings").hide();
      $("#show_hide").click(function(){
        if($("#settings").hasClass("hide")){
          $(this).text("
  • ");
          $("#settings").removeClass("hide");
          $("#settings").addClass("show");
          $("#settings").show();
        }else{
          $(this).text("
  • ");
          $("#settings").removeClass("show");
          $("#settings").addClass("hide");
          $("#settings").hide();
        }
      });
    });
</script>

<div class="info">
    <span id="show_hide">
  • </span>&nbsp;<h4>Overskrift nr. 1</h4>
</div>   
<div id="settings" class="hide">
    <div class="row">bla bla bla</div>
</div>

<div class="info">
    <span id="show_hide">
  • </span>&nbsp;<h4>Overskrift nr. 2</h4>
</div>   
<div id="settings" class="hide">
    <div class="row">bla bla bla</div>
</div>
Avatar billede ejvindh Ekspert
25. juni 2024 - 14:15 #1
Nu bruger du JQuery, hvilket jeg ikke er så hjemme i. Men i almindelig javascript ville man nok skulle iterate igennem alle instanser, og for hver af disse aktivere show/hide.

Altså fx noget i stil med følgende pseudokode:

  var entries = document.getElementsByClassName("hide");
  for (var i = 0; i < entries.length; i++) {
    doSomethingFunction(entries[i]);
  }
Avatar billede erikjacobsen Ekspert
25. juni 2024 - 18:58 #2
Et id på et element skal være unikt på siden. Du har 2  <div id="settings"  ...>
Avatar billede nemlig Professor
26. juni 2024 - 20:19 #3
Tak for jeres input.
Jeg har lavet denne løsning. Den virker, men køn er den nu ikke:
<?php
        for ($x = 1; $x <= 10; $x++) {
            echo '
            $(function(){
              $("#settings'.$x.'").hide();
              $("#show_hide'.$x.'").click(function(){
                if($("#settings'.$x.'").hasClass("hide")){
                  $(this).text("
  • ");
                  $("#settings'.$x.'").removeClass("hide");
                  $("#settings'.$x.'").addClass("show");
                  $("#settings'.$x.'").show();
                }else{
                  $(this).text("
  • ");
                  $("#settings'.$x.'").removeClass("show");
                  $("#settings'.$x.'").addClass("hide");
                  $("#settings'.$x.'").hide();
                }
              });
            });';
        }
        ?>

<div class="info">
    <span id="show_hide1">
  • </span>&nbsp;<h4>text 1</h4>
</div> 
<div id="settings1" class="hide">
    <div class="row">bla bla bla</div>
</div>

<div class="info">
    <span id="show_hide2">
  • </span>&nbsp;<h4>text 2</h4>
</div> 
<div id="settings2" class="hide">
    <div class="row">bla bla bla</div>
</div>
Avatar billede erikjacobsen Ekspert
26. juni 2024 - 20:33 #4
Det er en måde at gøre det, ja.  Der er også andre måder. Udstyr dine settings-diver med en dummy class  .... <div class="hide dummy">  og hent en liste af dem med:

  var list  = $(".dummy")

Den liste kan du løbe igennem med for, eller map, eller each, og formentlig gøre det du skal.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester