Ответ 1
Его называют селектор атрибутов
option[value="1"]
{
background-color:yellow;
}
Пример http://jsfiddle.net/JchE5/
Есть ли селектор CSS, который позволяет мне выбирать элемент на основе значения параметра выбора HTML?
<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>
Я ищу метод HTML/CSS только для отображения выбранного количества полей формы. Я уже знаю, как это сделать с помощью Javascript.
Есть ли способ сделать это?
Edit:
Название вопроса, возможно, вводит в заблуждение. Я не пытаюсь создать поле выбора, это довольно распространенное и много ответов на SO уже. Я на самом деле пытался стилизовать элемент <P>
на основе значения, выбранного в <select>
.
Как бы то ни было, что я действительно пытаюсь сделать, это отобразить несколько полей формы на основе выбранного числового значения:
<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>
Я хотел бы отображать div.stuff-1
и div.stuff-2
, когда число_файлов = 2 и display div.stuff-1
div.stuff-2
и div.stuff-3
, когда количество штук = 2.
Что-то вроде этого fiddle
Его называют селектор атрибутов
option[value="1"]
{
background-color:yellow;
}
Пример http://jsfiddle.net/JchE5/
Вы можете использовать
select option[value="1"]
но поддержка браузера не будет фантастической.
Для этого, вероятно, требуется родительский селектор, который не был указан для CSS2 или CSS3.
Селектор объектов определенный в рабочем проекте CSS4 на май 2013 года, но ни один разработчик браузера еще не реализовал его.
Является ли рассматриваемый метод (теоретически) использующим селектор субъекта, еще предстоит увидеть.
Я считаю, что в режиме "live" или в реальном времени это возможно только при использовании javascript или jQuery. Оберните потенциально скрытые поля в div с display: none
onLoad и измените состояние JS или jQuery на display: block
или, как вам нравится.
//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
Я использую в одном из своих приложений...
Возможно также с PHP, но с PHP вам придется отправить запрос на изменение, или вы можете написать код в php, чтобы загружать определенные классы на основе уже выбранных значений, например
<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>
Как насчет этой альтернативы?
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;
}
Вы также можете использовать label
и спрятать (несколько способов) input
, если это необходимо. Я признаю, что это требует некоторого вмешательства, чтобы отображать группы input
и div
, но я думаю, что это того стоит.