2009-09-11 12 views
8

ho essenzialmente la stessa situazione come la persona nella seguente domanda:Mostra/Nascondi multipli DIV con Seleziona utilizzando jQuery

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

Attraverso approfondite ricerche all'interno di Google sono stato in grado di venire con diversi diversi metodi in cui le persone sostengono che il loro metodo funziona. Devo ancora far funzionare correttamente nessuno. Non conosco ancora abbastanza bene jQuery per comprendere appieno come scrivere da zero, quindi per ora mi baso su esempi davvero validi.

Quello che ho cercato di lavorare con (sulla base di esempi che ho trovato e provato) è questo:

<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> 
  • Nota: io sto usando parentesi piuttosto che meno-che e di una maggiore -con segni in html da visualizzare correttamente in questo messaggio.

che cosa ottengo quando prova questo:

  • Sul primo carico con niente selezionato => Nessun DIV è esposizione.
  • Quando si seleziona DIV Area 1 => DIV Area 2 e 3 vengono visualizzate.
  • Quando si seleziona DIV Area 2 => DIV Area 1 e 3 vengono visualizzate.
  • Quando si seleziona DIV Area 3 => DIV Area 1 e 2 vengono visualizzate.

Il mio cervello è fritto per la giornata. Cosa posso fare per risolvere questo problema?

+0

una risposta alla tua domanda, ma esploro jQuery metodo # bilico per condizionale nascondi/mostra. –

risposta

1

Swap mostra/nascondi in modo che assomiglia a questo:

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

Chiedo scusa per non averlo notato quando ho pubblicato originariamente ... Nel mio codice di lavoro, i segni del dollaro sono presenti. Devono essere stati strappati via quando ho postato il mio codice. –

1

Questo codice è un po 'più succinta:

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

In sostanza, se v'è un valore selezionato (per esempio, l'opzione non è impostato su "Scegli"), quindi vengono visualizzati tutti gli elementi div.box. Il DIV che corrisponde all'opzione selezionata viene quindi nascosto. Questo dovrebbe accadere abbastanza velocemente in modo che il flash non sia evidente.

+0

Potresti aver frainteso. Non voglio assolutamente che gli elementi DIV vengano mostrati inizialmente. Voglio solo che uno sia visualizzato una volta che è stata fatta una selezione. –

+0

@Thomas Grant: $ ("div.box"). Hide() gli elementi sulla pagina caricano? –

10

farei questo:

<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

Dopo aver letto il codice suggerito, ho capito che nelle mie tre righe come: ('# divarea1') [($ (this) .val() == 'area1')? 'nascondi': 'mostra'](); Inizialmente ho dimenticato il punto e virgola finale. Questo potrebbe aver causato alcuni dei problemi che stavo vivendo. Ho comunque provato il tuo codice e sta eseguendo esattamente quello che stavo cercando. Grazie! –

+0

Se avete la vostra risposta, potreste chiudere la domanda spuntando il segno accanto al numero, grazie :) – Mottie

+0

come funzionerebbe se lo si volesse, al caricamento della pagina, mostrare il div corrispondente alla voce selezionata del menu a discesa ? cioè, sto impostando l'elemento selezionato sul lato server, quindi quando la pagina viene renderizzata, mostra il div appropriato (come opppato a tutti o nessuno di essi). Grazie! –

3

@fudgey ha dato una bella soluzione. ma ho pochi dubbi. Dipenderà dal valore e sarà necessario modificare ID attributo di<div> ogni volta.

Così mi piacerebbe fare questo `

$(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>` 
Non