HTML<datalist>タグの基本+応用!入力候補を定義する方法

Webページを作成するにあたって、高頻度で必要になるのがフォーム。読者の感想はもちろん、簡単なアンケートも行える便利な機能ですが、その中で入力候補を表示できるタグがあるのをご存じですか?すでに存在していたselectタグとは少し違ったdatalistタグ。

datalistタグとは?使い方を知りたい!

今回は、datalistタグの

・基本的な使い方
・datalistタグとselectタグの違い

について説明します。全てサンプルコードを記載していますので、実際の動作を試しながら読み進めてくださいね!

datalistタグとは

datalistタグの読み方

daatlistタグは「データリストタグ」と読みます。

datalistタグの説明

datalistタグはフォーム内で使用されるタグです。フォームの入力欄でユーザに向けて、入力候補をサポートします。フォームとはサイトの読者のために用意されたアンケートのようなもので、読者に回答を記入してもらい、サーバ上でその回答をまとめます。

datalistタグで利用できる属性

datalistタグでは以下のグローバル属性のみが使用可能です。

属性 説明
 accesskey  要素に体するショートカットキーを指定するための属性です。
 autocapitalize  ブラウザでユーザーが要素に入力や編集をした際、入力欄で入力した文字列の最初の文字が自動的に大文字化されるかどうかを設定する属性です。
class  要素にCSSでスタイル(見た目)を適用するためによく使われる属性です
 contenteditable  要素の内容を編集可能かどうかを指定する属性です。
 data-*  要素にオリジナルのデータ属性を指定するための属性です。
 dir  テキストの文字の方向を右書き・左書きのどちらかに指定する属性です。
draggable  要素がドラッグ可能かどうかを指定する属性です。
 dropzone  要素の上でコンテンツをドロップできるかどうかを指定する属性です。
hidden  要素の非表示を指定する属性です。
 id  class属性同様、要素にCSSでスタイルを適用するためによく使われます。同じid属性はページ内で1回しか使えません。
 inputmode 仮想キーボードの種類の構成に関するヒントを与えます。
 is  登録したカスタム内臓要素のように振舞うように指定できます。
 itemid  項目で一意なグローバル識別子です。
 itemprop  その要素で記述された内容がどのような意味を持つかを定義する属性です。
 itemref  項目に関連付けることができます。
 itemscope itemtypeとセットで使用する属性です。ブロックに含まれているHTMLが特定の項目に関するということを指定します。
 itemtype  アイテムの種類を指定するための属性です。
 lang  要素の中で使われる言語を定義する属性です。
 part CSSの疑似要素::partを使用するためにパート名を付けます。
 slot  要素にシャドウツリーのスロットを割り当てるための属性です。
 spellcheck  要素のスペルチェックを有効にするかどうかを指定する属性です。
 style  要素に直接スタイル(見た目)を指定するための属性です。
 tabindex  Tabキーを使って要素を選択する際の優先順位を指定する属性です。
 title  要素のタイトルを定義します。パソコンのブラウザでは、要素部分にマウスを当てると定義したタイトルが表示されます。
注意
contextmenu属性はHTML5ではサポートされていません。使用しないように注意しましょう。

対応ブラウザ

対応ブラウザは以下の通りです。

PC用ブラウザ 対応状況
Chrome 20
Edge 12
Firefox  4
nternet Explorer  10
Opera  9.5
Safari  12.1
スマートフォン用ブラウザ 対応状況
Android webview  4.4.3
Android版Chrome  33
Android版Firefox  4
Android 版 Opera 一部
iOS版Safari  12.2
Samsung Internet  2.0

datalistタグの基本的な使い方

datalistタグの使い方

datalistタグは候補を作成するoptionタグと一緒に使用します。datalistタグの中にoptionタグを入れ、候補を記述していきます。

See the Pen
datalist基本
by rabbittyu (@rabbittyu)
on CodePen.

まずはlabelタグで入力してもらう値について説明します。labelタグのfor属性とinputタグのid属性を結びつけることで、文字をクリックしても入力欄がフォーカスされるようになります。

そしてinputタグでは入力欄を生成します。ここでの属性はlist属性を指定。これはdatalistタグと必ずセットで使用する属性なので覚えておきましょう。さらにname属性で名前を付けておくと、CSSでの装飾が容易になります。

inputタグを記載したら、その下にdatalistタグを記載します。id属性を使用し、必ずinputのlist属性と同じ値を設定してください。<datalist></datalist>の間にoptionタグを使用して入力候補を指定していきます。optionタグ内、value属性で入力値の設定が行えます。

datalistタグと類似するselect要素との違い

ここではdatalistタグと同じように入力候補を表示する、selectタグとの違いを説明します。datalistタグはHTML5から新しく導入された要素です。selectタグとdatalistタグの明確な違いは、selectタグは決まった値しか選択できないの対し、datalistタグは選択肢からの選択はもちろん、自分でも値を入力できると言う事です。

これはdatalistタグで生成されるのがテキストボックスだから!selectタグではテキストボックスではなく、セレクトボックスが生成されるため、自由に値を入力することができないのです。挙動の違いを実際に確認していきましょう。

See the Pen
datalist 違い
by rabbittyu (@rabbittyu)
on CodePen.

まとめ

今回はdatalistタグについてご紹介しました。datalistタグは

  • テキストエリアに入力候補を表示する
  • inputタグにlist属性を指定して、datalistと紐づけて使用する
  • selectタグとの違いは、入力候補だけでなく任意の値も入力できる点

以上の3点がポイントになります!特にselectボックスとの違いは、ややこしいですが覚えておくと便利です。また定義する際も、datalistタグだけでは動作しません必ず直前でinputタグを使用し、その中のlist属性とdatalist属性のidを同じにして、紐づけを行うのを忘れないでください。

参考文献:
MDN web docks <datalist>
HTML5タグリファレンス:datalist
HTML5タグリファレンス:option
HTML5タグリファレンス:select
shirokumaoshiri ~HTML5の新要素「datalist」について

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?