ドロップダウンリストに表示されないデフォルトのテキスト


108

私が持ってselect示し、最初はどの言語選択をユーザーが言語を選択するまで。ユーザーが選択を開いたときに、実際のオプションではないため、[言語の選択]オプションを表示しないようにします。

どうすればこれを達成できますか?

回答:


214

カイルのソリューションは完璧に機能したので、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>

ここフィドルと下のスクリーンショットを確認してください。

ここに画像の説明を入力してください


これは素晴らしい答えですが、Angular JSを使用する場合、Angularは自動的に空のオプションを追加してデフォルトとして設定するため、機能しません
Dennis Wanyonyi

とにかく、ちょうど参考のために、ここでは、あなたが、角度で行う角度の特定はここで説明してちょうど上記のアプローチを組み合わせてしまう方法ですmetaltoad.com/blog/...
のび太

注意しくださいhidden属性は、上記の回答に使用される、任意のHTML要素に設定することができます属性であり、通常は(必ずしも必要ではないが)設定した場合と同じように実装されdisplay: noneCSSで。
Mark Amery 2017年

2
注また、設定というhiddenoptionで、Aselect iOS版またはMacのどちらでも、Safariでない仕事。したがって、この回答はブラウザの部分的なサポートのみを提供します。
Mark Amery

1
美しいです!
Fibo Kowalsky

59

これが解決策です:

<select>
    <option style="display:none;" selected>Select language</option>
    <option>Option 1</option>
    <option>Option 2</option>
</select>

5
selected="true"無効であることに注意してください。代わりに、selected="selected"(X)HTMLまたはHTMLだけselectedで使用してください。次のように変更されたselected属性とselectedプロパティを混同しているようです:myOption.selected = true;またはmyOption.selected = false;
Oriol

2
「display:none」は、AndroidやiOSなどのデバイスネイティブの選択を使用するブラウザーでは無視されます。このオプションを機能させるには、select.focusでDOMからオプションを削除し、それを返して、select.blurで選択する必要があります。
Radek Pech 2014年

-1; のび太の答えのhiddenように(これは「通常CSSで実装されています」使用してdisplay: none使用して、とにかく)display: none上のoptionSafariで動作しません。オプションはまだ表示されます。
Mark Amery 2017年

50

適切でセマンティックな方法は、プレースホルダーラベルオプションを使用することです。

  • optionの最初の子として要素を追加しますselect
  • セットする value= ""たものにoption
  • プレースホルダーテキストをそのコンテンツとして設定します option
  • 追加requiredの属性をselect

これにより、ユーザーはフォームを送信できるようにするために別のオプションを選択する必要があり、ブラウザは必要に応じてをレンダリングするoption必要があります。

select要素にプレースホルダーラベルオプションが含まれている場合、ユーザーエージェントは、コントロールの有効なオプションではなく、ラベルであることを伝える方法でそのオプションをレンダリングすることが期待されます。

ただし、ほとんどのブラウザでは通常の方法でレンダリングされますoption。したがって、次のコードをに追加して、手動で修正する必要がありますoption

select > .placeholder {
  display: none;
}
<select required>
  <option class="placeholder" selected disabled value="">Select language</option>
  <option>Option 1</option>
  <option>Option 2</option>
</select>


これ(ここでのすべての回答の中でこの問題を解決するための最も徹底的な試みです)でも、iOSまたはMacのSafariでは機能しません。選択が開かれたときも、オプションは残ります。
Mark Amery 2017年

@MarkAmery @Nobitaの回答で提案されているようにして、ほとんどのモバイルブラウザがCSS属性を無視しているように見えるのでhiddenはなく、単にプレースホルダオプションタグに属性を追加することをお勧めします。display: nonedisplay: none
Gaboik1

@ Gaboik1その答えのコメントで、私はそれhiddenが一般に内部で実装されていることを指摘しましたdisplay: none(そして仕様ではこれを「典型的な」実装として明示的に示唆しています)。モバイルまたはその他- -任意のブラウザがあった場合にはそのように、私は驚かれると思いhidden働いたがdisplay: noneありませんでした。例を挙げていただけますか?
マークアメリー2018年

21

selectタグにプレースホルダーの割り当てを使用することはできないため、純粋なHTML / CSSで求めていることを正確に行う方法はないと思います。ただし、次のようなことができます。

<select>
  <option disabled="disabled">Select language</option>
  <option>Option 1</option>
</select>

「言語の選択」がドロップダウンに表示されますが、別のオプションが選択されると、それを再選択することはできません。

お役に立てば幸いです。


2
私は、style = "display:none;"を使用して無効化と選択を組み合わせることが最善であることを発見しました。無効化は、検証を実行する場合に役立ちます。これにより、デフォルトで有効化されたオプションが選択されていないことが確認されます。
Illarion Kovalchuk

-1ここでの他の回答(特にNobtiaとOriolの回答)は、より詳細な説明とはるかに完全なソリューションの両方を提供するためです。
Mark Amery 2017年

7

これを試して:

<div class="selectSelection">
    <select>
        <option>Do not display</option>
        <option>1</option>
        <option>1</option>
    </select>
</div>

CSSで:

.selectSelection option:first-child{
    display:none;
}

この回答には、他の回答にも詳細に含まれていないものは何も含まれていません。-1。
Mark Amery 2017年

5

選択が完了するまで、選択の上にスパンが表示されたソリューションがあります。スパンはデフォルトのメッセージを表示するため、命題のリストにはありません。

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でテスト済み。


OSX上のChromeでは常に最初のオプションが選択されて表示されますが、ここで提供されるすべてのソリューションでは最初に表示されるオプションが選択されるため、OSX固有のようです。
Gamadril、2015

代わりに、spanそこに使用されているlegendとそれは完璧またはだろうlabel
karlcow

これは興味深いアプローチであり、この振る舞いをSafariで機能させる唯一の可能な方法ですが、ここでは不適切に実装されています。pointer-events: noneクリックが通過して選択できるようにするには、少なくともスパンが必要です。
Mark Amery 2017年

0
<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になります。


0

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');​​​​​​​
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.