HTMLフォーム:Select-OptionとDatalist-Option


136

Select-OptionとDatalist-Optionの違いは何だろうと思っていました。どちらか一方を使用した方がよい状況はありますか?それぞれの例は次のとおりです。

選択オプション

<select name="browser">
<option value="firefox">Firefox</option>
<option value="ie">IE</option>
<option value="chrome">Chrome</option>
<option value="opera">Opera</option>
<option value="safari">Safari</option>
</select>

データリスト-オプション

<input type=text list=browsers>
<datalist id=browsers>
  <option value="Firefox">
  <option value="IE">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>

11
HTML5は、特に引用符で囲まれていない属性が有効であることを言うので: w3.org/TR/html-markup/syntax.html#syntax-attr-unquoted
james.garriss

1
optiondatalist-optionでタグを閉じない理由を誰かが知っていますか?Sublimeが望んでいるようです
Johnny Metz

1
@ johnny Metzタグを閉じることもできますが、次のようなこともできます:code <input list = "browsers" name = "browser"> <datalist id = "browsers"> <option value = "firefox" > Firefox </ option> <option value = "ie"> IE </ option> <option value = "chrome"> Chrome </ option> <option value = "opera">オペラ</ option> <option value = " safari "> Safari </ option> </ datalist> code結果は奇妙です。データリストはリストの値を出力します。次に、その値が入力フィールドの値になります。
サラMジャイルズ

3
@ JohnnyMetz、HTML 5は、XHTMLに対する反応でした。のような特定の要素についてoptionは、終了タグを持っている必要も、自己終了する必要もありません。HTML 5!= XHTML。
james.garriss

2
仕様には、「特定の通常の要素の開始タグと終了タグは省略できる」と記載されています。また、「option要素の直後に別のoption要素が続いている場合、またはoptgroup要素が直後にある場合、または親要素にコンテンツがない場合は、option要素の終了タグが省略される場合があります。」 w3.org/TR/html/syntax.html#optional-tags
james.garriss

回答:


180

要件と提案の違いと考えてください。以下のためselectの要素、ユーザーは、あなたが与えてくれたのいずれかのオプションを選択する必要があります。datalist要素については、ユーザーが指定したオプションの1つを選択することをお勧めしますが、ユーザーは実際に必要なものを入力に入力できます。

編集1:したがって、どちらを使用するかは要件によって異なります。ユーザー選択肢の1つを入力する必要がある場合は、select要素を使用します。用途が何でも入力できる場合は、datalist要素を使用します。

編集2:HTML Living Standardでこの一言を見つけた:「datalist要素の子孫である各option要素...提案を表す」


また、それは主に【部分的なサポート((持つcaniuse.com/#feat=datalistを等、そのような長いdatalistsとしてバグがunscrollableになっと、他のブラウザで)
Govindライ

現時点では、クロムでは、データが入力(入力)されると、矢印をクリックすることが禁止されます。ほとんどの場合、これはおそらく理想的ではありません。
デビッド

66

技術的な観点から見ると、それらはまったく異なります。<datalist>他の要素のオプションの抽象的なコンテナです。あなたの場合はそれを使っ<input type="text"たことがありますが、範囲、色、日付などでも使うことができます。http://demo.agektmr.com/datalist/

オートコンプリートの一種として、テキスト入力と一緒に使用する場合、問題は本当に:自由形式のテキスト入力を使用する方が良いですか、それとも事前に定義されたオプションのリストを使用する方がいいですか?その場合、私は答えがもう少し明白だと思います。

<datalist>テキストフィールドのオプションのリストとしての使用に焦点を当てると、それと選択ボックスとの間の特定の違いがここにあります:

  • <datalist>送られたテキストボックスは、表示ラベルや提出の両方のための単一の文字列を持っています。選択ボックスは、表示ラベルとは異なる送信値を持つことができます<option value='ie'>Internet Explorer</option>
  • <datalist>送られたテキストボックスはサポートされていない<optgroup>ディスプレイを整理するためのタグを。
  • あなたにはオプションのリストにユーザーを制限することはできません<datalist>あなたがでできるように<select>
  • onchangeイベントは動作が異なります。上の<select>要素、のonchangeイベントはとのに対し、変更するとすぐに解雇された<input type="text"要素がフォーカスを失ったか、ユーザーがEnterキーを押した後にイベントが発生しています。
  • <datalist>ブラウザ間でのサポートは非​​常に不安定です。利用可能なすべてのオプションを表示する方法に一貫性がなく、状況が悪化するだけです。

最後のポイントは私の意見では本当に大きなものです。より普遍的なオートコンプリートフォールバックが必要になるため、を構成するトラブルを経験する理由はほとんどありません<datalist>。さらに、適切なオートコンプリートプラグインを使用すると、オプションの表示をスタイル設定する方法が可能になりますが、<datalist>機能しません。あなたが好きなように操作できる要素を<datalist>受け入れたら<li>、それは本当に素晴らしいことでしょう!しかし、いいえ。

また、私が知る限り、<datalist>検索は文字列の先頭からの完全一致です。だからあなたが持っていた場合<option value="internet explorer">、「explorer」を検索した場合、結果は得られません。ほとんどのオートコンプリートプラグインは、テキスト内の任意の場所を検索します。

私は<datalist>、ユーザーが最新のChromeまたはFirefoxを使用しており、偽の値を送信しようとしないことを100%確実に知っている一部の内部ページの迅速で遅延の便利なヘルパーとしてのみ使用しました。それ以外の場合は、<datalist>ブラウザのサポートが非常に貧弱であるため、の使用を推奨するのは困難です。


3
すばらしい答え!! 2番目の弾丸について説明していただけますか?「ディスプレイを整理するためのオプショングループ」とはどういう意味ですか?ありがとう。
Govind Rai

afaik(2019、ChromeおよびFirefox)、<datalist>は接頭辞(接頭辞だけでなく)に一致します。したがって、「re」と入力すると、「Firefox」と「Internet Explorer」の両方が提案されます
sam boosalis '10 / 10/19

@GovindRai「optgroup要素」をざっと検索すると、常に役立つMDNからこのページが返され、詳細情報(および例)が表示されます
。developer.mozilla.org/en

私はFirefox 66とChrome 73でテストしました-実際、データリストラベルはどこでも一致します。たとえば、データリストに国名が含まれている場合、「ted」は「United States」と「United Kingdom」に一致します。
Błotosmętek

5

データリストには、オートコンプリートと提案がネイティブに含まれています。また、提案で定義されていない値をユーザーが入力できるようにすることもできます。

Selectは、ユーザーが選択する必要がある事前定義のオプションのみを提供します


2

データリストは、HTML5をサポートするブラウザーの新しいHTMLタグです。オプションのリストを含むテキストボックスとしてレンダリングされます。たとえば、性別テキストボックスの例では、テキストボックスに「M」または「F」と入力すると、男性女性のオプションが表示されます。

<input list="Gender">
<datalist id="Gender">
  <option value="Male">
  <option value="Female> 
</datalist>

5
確かに、しかしそれは一つの素晴らしい、新しい情報を与えます、すなわち最初の文字をタイプするとリストの対応するアイテムが選択されるということです。
james.garriss 2015年

1

「どちらか一方を使用した方がよい状況はありますか?」という質問の一部に具体的に回答するには、繰り返しセクションのあるフォームを検討してください。繰り返しセクションに多くのselectタグが含まれている場合、option選択ごと、行ごとにをレンダリングする必要があります。

このような場合は、をいくつでも使用できるため、datalistwithの使用を検討します。これにより、サーバーでのレンダリング時間を大幅に節約できる可能性があり、任意の行数に合わせてより適切にスケーリングできます。inputdatalistinput


ユーザーが選択できるオプションを提供する必要がない場合は、なぜデータリストを使用する必要があるのでしょうか。代わりにテキストフィールドを使用してください。
james.garriss

0

データリストに選択された機能がないことに気づきました。それはあなたに選択肢を与えるだけですが、デフォルトのオプションを持つことはできません。選択したオプションを次のページに表示することもできません。


入力とデータリストの同等の機能は、入力自体にvalue = "(default option)"を設定することです。type = "text"の入力の場合、このテキストはデフォルトで表示されますが編集可能です。
Bemisawa 2017

0

とには別の重要な違いがselectありますdatalistます。これがブラウザのサポート要素です。

selectは、datalistと比較してブラウザーで広くサポートされています。データリストの完全なブラウザサポートについては、このページをご覧ください-

データリストブラウザーのサポート

selectが事実上すべてのブラウザーでサポートされている場合(IE6 +、Firefox 2 +、Chrome 1+以降)


0

選択と似ていますが、データリストには自動提案などの追加機能があります。入力と同時に、入力候補を表示することもできます。

ユーザーはリストにないアイテムを書き込むこともできます。

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