2009-09-11 10 views
8

I zasadniczo mają takiej samej sytuacji jak osoby w następujące pytanie:Pokaż/Ukryj wielu div z wybierz za pomocą jQuery

Link: how to show/hide divs by select.(jquery)

Dzięki rozległej wyszukiwania w Google udało mi się wymyślić kilka różne metody, w których ludzie twierdzą, że ich metoda działa. Muszę jeszcze sprawić, aby ktokolwiek działał poprawnie. Nie wiem jeszcze wystarczająco dużo o jQuery, aby w pełni zrozumieć, jak napisać to od zera, a więc teraz polegam na naprawdę dobrych przykładach.

Co Próbowałam pracować (na podstawie przykładów znalazłem i próbowałem) jest taka:

<script type="text/javascript"> 
    (document).ready(function() { 
     ('.box').hide();<br/> 
     ('#dropdown').change(function() { 
     ('#divarea1')[ ($(this).val() == 'area1') ? 'hide' : 'show' ]() 
     ('#divarea2')[ ($(this).val() == 'area2') ? 'hide' : 'show' ]() 
     ('#divarea3')[ ($(this).val() == 'area3') ? 'hide' : 'show' ]() 
     }); 
    }); 
</script> 
<form> 
    <select id="dropdown" name="dropdown"> 
     <option value="0">Choose</option> 
     <option value="area1">DIV Area 1</option> 
     <option value="area2">DIV Area 2</option> 
     <option value="area3">DIV Area 3</option> 
    </select> 
</form> 
<div id="divarea1" class="box">DIV Area 1</div> 
<div id="divarea2" class="box">DIV Area 2</div> 
<div id="divarea3" class="box">DIV Area 3</div> 
  • Uwaga: używam nawiasów zamiast mniej niż i większe -nie znaki wokół html, aby wyświetlać poprawnie w tej wiadomości.

co otrzymuję kiedy to sprawdzić:

  • Na pierwszym obciążeniu nic wybranym => nr DIV jest wyświetlacz.
  • Po wybraniu obszaru DIV 1 => wyświetlane są obszary DIV 2 i 3.
  • Po wybraniu obszaru DIV 2 => Obszar DIV 1 i 3 zostaną wyświetlone.
  • Po wybraniu obszaru DIV 3 => Obszar DIV 1 i 2 są wyświetlane.

Mój mózg jest smażony na cały dzień. Co mogę zrobić, aby to naprawić?

+0

nie odpowiedzi na swoje pytanie, ale zbadać metody jQuery # przełączania dla warunkowego Pokaż/Ukryj. –

Odpowiedz

1

Zmienne pokaż/ukryj tak, że wygląda tak:

$('#divarea1')[ ($(this).val() == 'area1') ? 'show' : 'hide' ]() 
+0

Przepraszam, że nie złapałem tego, kiedy pierwotnie pisałem ... W moim działającym kodzie znaki dolara są obecne. Musiały zostać usunięte, kiedy opublikowałem swój kod. –

1

Kod ten jest nieco bardziej zwięzła:

$(document).ready 
(
    function() 
    { 
    $("div.box").hide(); 
    $("#dropdown").change 
    (
     function() 
     { 
     var selectedValue = $(this).val(); 
     if(selectedValue !== "0") 
     { 
      $("div.box").show(); 
      $("#div" + selectedValue).hide(); 
     } 
     } 
    ); 
    } 
}; 

Zasadniczo, jeśli jest wybrana wartość (czyli opcja nie jest ustawione na "Wybierz"), a następnie wyświetlane są wszystkie elementy div.box. DIV pasujące do wybranej opcji jest następnie ukryte. Powinno to nastąpić wystarczająco szybko, aby lampa błyskowa nie była zauważalna.

+0

Mogłeś źle zrozumieć. Nie chcę, aby którykolwiek z elementów DIV był pokazywany w ogóle. Chcę, aby JEDEN był wyświetlany po dokonaniu wyboru. –

+0

@Thomas Grant: Nie $ ("div.box"). Hide() elementy na stronie ładują się? –

10

Chciałbym to zrobić:

<script type="text/javascript"> 
$(document).ready(function(){ 
$('.box').hide(); 
    $('#dropdown').change(function() { 
    $('.box').hide(); 
    $('#div' + $(this).val()).show(); 
}); 
}); 
</script> 
<form> 
<select id="dropdown" name="dropdown"> 
    <option value="0">Choose</option> 
    <option value="area1">DIV Area 1</option> 
    <option value="area2">DIV Area 2</option> 
    <option value="area3">DIV Area 3</option> 
</select> 
</form> 
<div id="divarea1" class="box">DIV Area 1</div> 
<div id="divarea2" class="box">DIV Area 2</div> 
<div id="divarea3" class="box">DIV Area 3</div> 
+0

Po przeczytaniu sugerowanego kodu zdałem sobie sprawę, że w moich trzech liniach, takich jak: ("# divarea1") [($ (this) .val() == 'area1')? 'Hide Show' ](); Początkowo zapomniałem o końcowym średniku. Mogło to spowodować niektóre problemy, których doświadczałem. Wypróbowałem jednak twój kod i wykonałem dokładnie to, czego szukałem. Dziękujemy! –

+0

Jeśli masz odpowiedź, możesz zamknąć pytanie, zaznaczając znacznik obok numeru, dziękuję :) – Mottie

+0

jak by to działało, gdybyś chciał, przy ładowaniu strony, pokazać div odpowiadający wybranemu elementowi listy rozwijanej ? to znaczy, ustawiam wybrany element po stronie serwera, a kiedy strona zostanie wyrenderowana, pokaż odpowiedni div (jako przeciwstawny wszystkim lub żadnemu z nich). Dzięki! –

3

@fudgey dał piękny rozwiązanie. ale nie mam wątpliwości. Będzie to zależało od wartości i potrzeby zmiany identyfikatora ID atrybutu<div> za każdym razem.

Tak bym to zrobić `

$(document).ready(function() { 
     $('.box').hide(); 
     $('#dropdown').change(function() {  
      var selectedIdx = (0 == $(this).attr("selectedIndex"))? '' :     $(this).attr("selectedIndex"); 
      if("" != selectedIdx){ 
       $('#divarea'+ selectedIdx).hide().siblings().show(); 
      } else { 
       $('.box').hide(); 
      }   
     }); 
    }); 
</script> 
<form> 
    <select id="dropdown" name="dropdown"> 
     <option value="0">Choose</option> 
     <option value="area1">DIV Area 1</option> 
     <option value="area2">DIV Area 2</option> 
     <option value="area3">DIV Area 3</option> 
    </select> 
</form> 
<div id="divarea1" class="box">DIV Area 1</div> 
<div id="divarea2" class="box">DIV Area 2</div> 
<div id="divarea3" class="box">DIV Area 3</div> 
</html>` 
Powiązane problemy