У мене є select
спочатку показ мови вибору, поки користувач не вибере мову. Коли користувач відкриває вибір, я не хочу, щоб він відображав варіант вибору мови , оскільки це не фактичний варіант.
Як я можу цього досягти?
У мене є select
спочатку показ мови вибору, поки користувач не вибере мову. Коли користувач відкриває вибір, я не хочу, щоб він відображав варіант вибору мови , оскільки це не фактичний варіант.
Як я можу цього досягти?
Відповіді:
Рішення Кайла для мене спрацювало чудово, тому я зробив свої дослідження, щоб уникнути будь-яких Js та CSS, а просто дотримуватися HTML. Додавання значення selected
елемента, яке ми хочемо відобразити як заголовка, змушує його відображатися в першу чергу як заповнювач. Щось на зразок:
<option selected disabled>Choose here</option>
Повна розмітка повинна відповідати цим рядкам:
<select>
<option selected disabled>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Ви можете подивитися на цю загадку , і ось результат:
Якщо ви не хочете, щоб текст тексту заповнення відображався у списку в параметрах, як тільки користувач натискає на поле вибору, просто додайте такий hidden
атрибут:
<select>
<option selected disabled hidden>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Ознайомтесь зі скрипкою та скріншотом нижче.
hidden
display: none
hidden
на option
в а select
не працює в Safari, ні на iOS, ні на Mac. Таким чином, ця відповідь пропонує лише часткову підтримку браузера.
Ось рішення:
<select>
<option style="display:none;" selected>Select language</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
selected="true"
це недійсне. Натомість використовуйте selected="selected"
в (X) HTML або просто selected
в HTML. Здається, ви переплутали selected
атрибут із selected
властивістю, яке змінюється так: myOption.selected = true;
абоmyOption.selected = false;
hidden
(який "типово реалізується в CSS" з display: none
будь-яким способом), використовуючи display: none
на option
не працює в Safari; опція все ще з’являється.
Правильний та семантичний спосіб - це використання опції мітки заповнення :
option
елемент як перший дочірникselect
value
= ""
option
option
required
атрибут доselect
Це змусить користувача вибрати інший варіант для того , щоб мати можливість представити форму, і браузери повинні надаватиoption
за бажанням:
Якщо елемент вибору містить опцію мітки заповнення заповнення, очікується, що агент користувача виведе цю опцію таким чином, що передає, що це мітка, а не допустима опція елемента керування.
Однак більшість браузерів вважають це нормальним явищем option
. Тож нам доведеться це виправити вручну, додавши до цього option
:
selected
Атрибут, щоб зробити його обраний за замовчуваннямdisabled
Атрибут, щоб зробити його не обирали користувачемdisplay: none
, щоб приховати це зі списку значеньselect > .placeholder {
display: none;
}
<select required>
<option class="placeholder" selected disabled value="">Select language</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
hidden
атрибут до тегу параметрів заповнювача замість того, display: none
як здається, що більшість мобільних браузерів ігнорує display: none
атрибут CSS, і це, на мій погляд, ще більш семантично правильне.
hidden
це, як правило, реалізовано як display: none
під кришкою (і специфікація прямо пропонує це як "типову" реалізацію). Тому я був би здивований, якби у будь-яких браузерах - мобільних чи інших, - де hidden
працювали, але display: none
не було. Чи можете ви навести який-небудь приклад?
Оскільки ви не можете використовувати присвоєння заповнювачів для select
тегів, я не вірю, що існує якийсь спосіб зробити саме те, що ви просите, за допомогою чистого HTML / CSS. Однак ви можете зробити щось подібне:
<select>
<option disabled="disabled">Select language</option>
<option>Option 1</option>
</select>
"Вибрати мову" відобразиться у спадному меню, але після вибору іншого варіанту його повторний вибір не вдасться.
Я сподіваюся, що це допомагає.
Спробуйте це:
<div class="selectSelection">
<select>
<option>Do not display</option>
<option>1</option>
<option>1</option>
</select>
</div>
У CSS:
.selectSelection option:first-child{
display:none;
}
У мене є рішення із прольотом, що відображається над вибраним, доки не буде зроблено вибір. Проміжок відображає повідомлення за замовчуванням, тому його немає в списку пропозицій:
HTML:
<span id="default_message_overlay">Default message</span>
<select id="my_select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
CSS:
#default_message_overlay {
position: absolute;
display: block;
width: 120px;
color: grey;
}
select {
width: 150px;
}
Javascript (з JQuery):
$(document).ready(function() {
// No selection at start
$('#my_select').prop("selectedIndex", -1);
// Set the position of the overlay
var offset = $('#my_select').offset();
offset.top += 3;
offset.left += 3;
$('#default_message_overlay').offset(offset);
// Remove the overlay when selection changes
$('#my_select').change(function() {
if ($(this).prop("selectedIndex") != -1) {
$('#default_message_overlay').hide();
}
});
});
Я зробив jsfiddle для демонстрації . Тестували з Firefox та IE8.
span
щоб там використовувати, legend
і це було б ідеально абоlabel
pointer-events: none
щоб пропустити кліки для вибору.
<option value="" id="ddl" name="prop" style="display:none;" disabled selected>chose something </option>
Ви можете, звичайно, перемістити css у файл css, якщо хочете, і поставити скрипт, щоб схопити esc
кнопку, щоб знову вибрати інвалід. На відміну від інших подібних відповідей, які я викладаю value=""
, це так, якщо ви надсилаєте значення (-и) свого списку вибору у формі, воно не буде містити "щось вибране". У asp.net mvc 5, надісланий як компільований json, var obj = { prop:$('#ddl').val(),...};
а JSON.stringify(obj);
значення опори буде нульовим.
Op1:
$("#MySelectid option").each(function () {
if ($(this).html() == "text to find") {
$(this).attr("selected", "selected");
return;
}
});
Op2:
$('#MySelectid option')
.filter(function() { return $.trim( $(this).text() ) == 'text to find'; }).attr('selected','selected');