2012-03-27 3 views

ответ

40

Я не думаю, что вы можете, но вы можете легко воспроизвести визуальный стиль с помощью CSS и, таким образом, только варианты в вашем выборе, поэтому все можно выбрать.

.optionGroup { 
 
    font-weight: bold; 
 
    font-style: italic; 
 
} 
 
    
 
.optionChild { 
 
    padding-left: 15px; 
 
}
<select multiple="multiple"> 
 
    <option value="0" class="optionGroup">Parent Tag</option> 
 
    <option value="1" class="optionChild">Child Tag</option> 
 
    <option value="2" class="optionChild">Child Tag</option> 
 
</select>

Многократное атрибут позволяет выбрать более одной строки (с Ctrl + Click). Вы можете удалить его, если это не то, что вы хотите. Это должно было показать вам, что все стало выбираемым, и это выглядит так же, как и с элементом optiongroup.

+5

Я пробовал это, но работает только в Firefox. –

+0

Извините забыли вариант стиля - это беспорядок через веб-браузеры. – grifos

+5

По крайней мере, вы можете создать отступ с добавлением   – grifos

-5

вопрос не очень понятно, но это то, что вы ищете:

<select multiple="multiple"> 
    <optgroup label="Parent Tag"> 
     <option value="1">Child Tag</option> 
     <option value="2">Child Tag</option> 
    </optgroup> 
</select> 
+0

Извините за не достаточно ясно. Я хочу, чтобы optgroup была выбрана так же, как вы выбрали опцию. –

0

@ ответ grifos не поддерживается в WebKit браузерах и не работает, когда Испытан в IE 11.

Одно из предложений было бы использовать маркированный/нумерованный список и стиль его с помощью CSS, а затем добавить функциональность JavaScript/JQuery.

Я видел прекрасную реализацию этого в прошлом, он может выглядеть очень гладко!

8

Это невозможно с использованием простого html. Несколько браузеров (mozilla) позволят вам добиться чего-то подобного с помощью css, но на момент написания этой статьи большинство браузеров (webkit, et.al) не поддерживают стиль элементов html select.

Однако существует ряд библиотек javascript, предназначенных для улучшения виджетов html-select и предоставления отсутствующих функций, таких как запрашиваемые. Для того, чтобы назвать несколько:

+0

Select2 is excellent – CVertex

0

Это даст голое ощущение списка с возможностью выбора optgroups. Оставь его очень простым, но вы можете создать свой контент.

.hide { 
    display:none; 
} 
.show { 
    display:block; 
} 
.selected.button { 
    display:block; 
    font-weight: bold; 
} 
button { 
    text-align: left; 
    min-width: 200px; 
    margin-left: 10px; 
    border: 0px; 
    background: #eee; 
    display: block; 
} 
#value_display { 
    width: 210px; 
    border: 1px solid #ddd; 
    border-radius: 4px; 
    padding-left: 8px; 
} 
</style> 
<html> 
<body> 


<!-- Div is a display and also trigger for displaying dropdown --> 
<div id="value_display" onclick="showOptions(this.value)"> 
    opt 0 
</div> 

<!-- setting height and doing overflow-y allows dropdown list with scrollbox --> 
<div id="select_div" class="hide" style="height: 80px; overflow-y: scroll;"> 

<button class="selected button" onclick="select(this.id)" id="opt 0">opt 0</button> 
<button onclick="select(this.id)" id="opt 0-1" style="padding-left: 15px">opt 0-1</button> 
<button onclick="select(this.id)" id="opt 0-2" style="padding-left: 15px">opt 0-2</button> 
<button onclick="select(this.id)" id="opt 0-3" style="padding-left: 15px">opt 0-3</button> 
<button onclick="select(this.id)" id="opt 0-4" style="padding-left: 15px">opt 0-4</button> 
<button class="" onclick="select(this.id)" id="opt 1">opt 1</button> 
<button onclick="select(this.id)" id="opt 1-1" style="padding-left: 15px">opt 1-1</button> 
<button onclick="select(this.id)" id="opt 1-2" style="padding-left: 15px">opt 1-2</button> 
<button onclick="select(this.id)" id="opt 1-3" style="padding-left: 15px">opt 1-3</button> 
<button onclick="select(this.id)" id="opt 1-4" style="padding-left: 15px">opt 1-4</button> 

<script> 

var showingOptions = false; 
var showingID = document.getElementById('value_display').innerHTML; 

function showOptions() { 
if(showingOptions) { 
    document.getElementById('select_div').className = "hide"; 
    showingOptions = false; 
} 
else { 
    document.getElementById('select_div').className = "show"; 
    showingOptions = true; 
} 
} 
function select(id){ 
    document.getElementById(id).className = 'selected button'; 
    document.getElementById(showingID).className = 'show'; 
    showingID = id; 
    document.getElementById('value_display').innerHTML = id; 
    document.getElementById('select_div').className = 'hide'; 
} 

</script> 
2

немного другое решение ..

.optionGroup { 
 
    font-weight: bold; 
 

 
}
<select> 
 
    <option value="0" class="optionGroup">Parent Tag</option> 
 
    <option value="1">&nbsp;&nbsp;&nbsp;Child Tag1</option> 
 
    <option value="2">&nbsp;&nbsp;&nbsp;Child Tag2</option> 
 
</select>

3

До этого поддерживается в стандарте HTML, любые и все ответы, данные были проблематичными , в том числе:

  1. Атрибуты класса разрешены для дочерних элементов select, но если/как стиль применяется к элементу, он сильно варьируется между браузерами и версиями браузера.
  2. Префикс & nbsp; будет иметь следствием, что если элемент выбора уже, чем выбранный вариант, визуальный эффект не будет приятным, при этом читаемый текст будет скрыт справа (см. пример ниже).
  3. Любой стиль, который вы применяете, не обязательно будет соответствовать стилю, к которому привык пользователь браузера. жирным шрифтом и курсивом является Firefox, но не обязательно каждый браузер. Многие браузеры применяют стиль, включающий серый цвет, чтобы помочь указать, что optgroup НЕ выбирается
  4. Концепция выбора метки optgroup не обязательно будет ожидаться пользователем.

Это привело меня к выводу, что лучший способ обойти эту проблему состоит в том, чтобы использовать библиотеку, такую ​​как UI-Selectable для всех выбранных на вашем сайте (для согласованности), ИЛИ использовать первый вариант в optgroup для представляют выбора всех детей, с четким описанием (например, «все шведские автомобили»):

<select multiple="multiple"> 
    <optgroup label="Parent"> 
     <option value="0" class="optionChild">ALL Children</option> 
     <option value="1" class="optionChild">Child Tag 1</option> 
     <option value="2" class="optionChild">Child Tag 2</option> 
    </optgroup> 
</select> 

.my-select { 
 
    width: 60px; 
 
}
<select class="my-select"> 
 
    <option>Parent</option> 
 
    <option selected="selected">&nbsp;&nbsp;&nbsp;Child</option> 
 
</select>

Смежные вопросы