2013-05-09 12 views
24

C'è un selettore CSS che mi consente di selezionare un elemento basato su un valore di opzione di selezione HTML?CSS per selezionare un altro elemento basato su un valore di selezione HTML Valore

<select> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

<p>Display only if an option with value 1 is selected</p> 

Sto cercando un HTML/CSS unico metodo per visualizzare solo un numero selezionato di campi del modulo. So già come farlo con Javascript.

C'è un modo per farlo?


Edit:

Il titolo questione è forse fuorviante. Non sto cercando di definire la casella di selezione, è abbastanza comune e ci sono già molte risposte su SO. In realtà stavo cercando di definire l'elemento <P> in base al valore selezionato nello <select>.

Come mai quello che sto davvero cercando di fare è quello di visualizzare una serie di campi di modulo in base a un valore numerico selezionato:

<select name="number-of-stuffs"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 
<div class="stuff-1"> 
    <input type="text" name="stuff-1-detail"> 
    <input type="text" name="stuff-1-detail2"> 
</div> 
<div class="stuff-2" style="display:none"> 
    <input type="text" name="stuff-2-detail"> 
    <input type="text" name="stuff-2-detail2"> 
</div> 
<div class="stuff-3" style="display:none"> 
    <input type="text" name="stuff-3-detail"> 
    <input type="text" name="stuff-4-detail2"> 
</div> 

Vorrei visualizzare div.stuff-1 e div.stuff-2 quando il numero-di-animali = 2 e display div.stuff-1div.stuff-2 e div.stuff-3 quando il numero di articoli = 2.

qualcosa di simile fiddle

+0

Possibile duplicato: http://stackoverflow.com/questions/1895476/how-to-style-a-select-dropdown-with-css-only-without-javascript – Mark

+0

È possibile selezionarlo utilizzando un selettore di attributo come ' option [value = "1"] 'ma il supporto del browser non è eccezionale, firefox ti consente di aggiungere stili ma Chrome no. Non penso che ci sia un modo per mostrare il paragrafo in base all'opzione selezionata senza JavaScript/jQuery. – ferne97

+0

Ed ecco un test per mostrare quali browser supportano i selettori degli attributi - http://dev.lcn.com/CSS3-selectors/browser-support.php – blackhawk

risposta

21

La sua chiamata attribute selector

option[value="1"] 
{ 
background-color:yellow; 
} 

Esempiohttp://jsfiddle.net/JchE5/

+1

non vuole visualizzare un div su quel valore piuttosto che uno stile che ?? –

+2

domanda aggiornata: Non sto davvero provando a selezionare l'elemento opzione, sto provando a selezionare un elemento p in base a quale opzione è selezionata. Il supporto del browser – hannson

3

È possibile utilizzare

select option[value="1"]

ma il supporto del browser non sarà fantastico.

+2

dovrebbe essere abbastanza buono: http://caniuse.com/#feat=css-sel2 – Mathieu

+0

Non significa il supporto del browser per i selettori, ma lo stile per i tag select e option. –

1

credo che in "live" o in tempo reale, è possibile solo con javascript o jQuery. Avvolgi i campi potenzialmente nascosti in div con display: none onLoad e fai in modo che JS o jQuery cambino lo stato su display: block o come preferisci.

//Show Hide based on selection form Returns 
$(document).ready(function(){ 

//If Mobile is selected 
$("#type").change(function(){ 
    if($(this).val() == 'Movil'){ 
    $("#imeiHide").slideDown("fast"); // Slide down fast 
    } else{ 
    $("#imeiHide").slideUp("fast"); //Slide Up Fast 
    } 
}); 

//If repairing is selected 
$("#type").change(function(){ 
if($(this).val() == 'repairing'){ 


$("#problemHide").slideDown("fast"); // Slide down fast 
$("#imeiHide").slideDown("fast"); // Slide down fast 
}else{ 
$("#problemHide").slideUp("fast"); //Slide Up Fast 
} 
}); 
}); 
// type is id of <select> 
// Movil is option 1 
// Repairing is option 2 
//problemHide is div hiding field where we write problem 
//imeiHide is div hiding field where we write IMEI 

sto usando in una delle mie applicazioni ...

Possibile con PHP troppo, ma con PHP, si dovrà inviare la richiesta di modifica o si può scrivere un codice php per avere una certa classi da caricare in base ai valori già selezionati, ad esempio

<select class="<?php if($valueOne == 'Something'){echo 'class1';}else{echo 'class2';}"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 
0

Che ne dici di questa alternativa?

HTML:

<input name="number-of-stuffs" type="radio" value="1" /> 
<div> 
    <input type="text" name="stuff-1-detail" /> 
    <input type="text" name="stuff-1-detail2" /> 
</div> 
<input name="number-of-stuffs" type="radio" value="2" /> 
<div> 
    <input type="text" name="stuff-2-detail" /> 
    <input type="text" name="stuff-2-detail2" /> 
</div> 
<input name="number-of-stuffs" type="radio" value="3" /> 
<div> 
    <input type="text" name="stuff-3-detail" /> 
    <input type="text" name="stuff-4-detail2" /> 
</div> 

CSS:

div { 
    display: none; 
} 

input:checked + div { 
    display: block; 
} 

È anche possibile utilizzare label e nascondere (più modi) il input se necessario .. lo ammetto questo richiede un po 'di armeggiare per visualizzare il input e div gruppi a parte, ma penso che ne valga la pena.

Problemi correlati