回答:
カイルのソリューションは完璧に機能したので、Jと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
属性は、上記の回答に使用される、任意のHTML要素に設定することができます属性であり、通常は(必ずしも必要ではないが)設定した場合と同じように実装されdisplay: none
CSSで。
hidden
上option
で、Aselect
iOS版またはMacのどちらでも、Safariでない仕事。したがって、この回答はブラウザの部分的なサポートのみを提供します。
これが解決策です:
<select>
<option style="display:none;" selected>Select language</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
selected="true"
無効であることに注意してください。代わりに、selected="selected"
(X)HTMLまたはHTMLだけselected
で使用してください。次のように変更されたselected
属性とselected
プロパティを混同しているようです:myOption.selected = true;
またはmyOption.selected = false;
hidden
ように(これは「通常CSSで実装されています」使用してdisplay: none
使用して、とにかく)display: none
上のoption
Safariで動作しません。オプションはまだ表示されます。
適切でセマンティックな方法は、プレースホルダーラベルオプションを使用することです。
option
の最初の子として要素を追加しますselect
value
= ""
たものにoption
option
required
の属性をselect
これにより、ユーザーはフォームを送信できるようにするために別のオプションを選択する必要があり、ブラウザは必要に応じてをレンダリングするoption
必要があります。
select要素にプレースホルダーラベルオプションが含まれている場合、ユーザーエージェントは、コントロールの有効なオプションではなく、ラベルであることを伝える方法でそのオプションをレンダリングすることが期待されます。
ただし、ほとんどのブラウザでは通常の方法でレンダリングされます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
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では、jsonとしてコンパイルされたmvc 5がコンパイルされvar obj = { prop:$('#ddl').val(),...};
、JSON.stringify(obj);
propの値はnullになります。