フォーム入力

textpasswordnumberurlemailsearchrangedateなど、さまざまなタイプの入力を作成します。

<template>
  <div>
    <b-form-input v-model="text" placeholder="Enter your name"></b-form-input>
    <div class="mt-2">Value: {{ text }}</div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        text: ''
      }
    }
  }
</script>

<!-- b-form-input.vue -->

入力タイプ

<b-form-input>のデフォルトはtext入力ですが、typeプロパティを、サポートされているネイティブブラウザのHTML5タイプ(textpasswordemailnumberurltelsearchdatedatetimedatetime-localmonthweektimerange、またはcolor)のいずれかに設定できます。

<template>
  <b-container fluid>
    <b-row class="my-1" v-for="type in types" :key="type">
      <b-col sm="3">
        <label :for="`type-${type}`">Type <code>{{ type }}</code>:</label>
      </b-col>
      <b-col sm="9">
        <b-form-input :id="`type-${type}`" :type="type"></b-form-input>
      </b-col>
    </b-row>
  </b-container>
</template>

<script>
  export default {
    data() {
      return {
        types: [
          'text',
          'number',
          'email',
          'password',
          'search',
          'url',
          'tel',
          'date',
          'time',
          'range',
          'color'
        ]
      }
    }
  }
</script>

<!-- b-form-input-types.vue -->

typeプロパティがサポートされていない入力タイプ(上記参照)に設定されている場合、text入力がレンダリングされ、コンソール警告が出力されます。

入力タイプの注意事項

  • すべてのブラウザがすべての入力タイプをサポートしているわけではなく、ブラウザの種類/バージョンによって一部のタイプが同じ形式でレンダリングされるわけでもありません。Can I useを参照してください。
  • 特定のタイプをサポートしていないブラウザは、text入力タイプにフォールバックします(レンダリングされたtype属性のマークアップには、リクエストされたタイプが表示されますが)。
  • リクエストされた入力タイプがブラウザでサポートされているかどうかを確認するためのテストは実行されません。
  • Chromeはバージョン26でdatetimeのサポートを失い、Operaはバージョン15で、SafariはiOS 7で失いました。datetimeを使用する代わりに、サポートが非推奨になっているため、datetimeを2つの別々の入力として使用してください。
  • dateおよびtime入力はネイティブブラウザタイプであり、カスタムの日付/時刻ピッカーではありません。
  • 日付と時刻のスタイルの入力の場合、サポートされている場合、GUIに表示される値は、その値によって返される値(つまり、年-月-日の順序)とは異なる場合があります。
  • 入力タイプに関係なく、値は常に文字列表現として返されます。
  • v-model.lazyは、<b-form-input>(またはカスタムVueコンポーネント)ではサポートされていません。lazyプロパティを代わりに使用してください。
  • v-model修飾子.number.trimは、ユーザーが入力しているときに予期しないカーソルのジャンプを引き起こす可能性があります(これは、カスタムコンポーネントでのv-modelに関するVueの問題です)。これらの修飾子の使用は避けてくださいnumberまたはtrimプロパティを代わりに使用してください。
  • 古いバージョンのFirefoxは、rangeタイプの入力でreadonlyをサポートしていない可能性があります。
  • minmax、およびstepをサポートしない入力タイプ(textpasswordtelemailurlなど)は、値が提供されていても、これらの値を無視します(ただし、それらは入力マークアップにレンダリングされます)。

予測テキスト入力とIME構成入力に関する注意事項

  • 予測テキストの自動提案ワードを使用すると、自動提案された単語が選択される(またはスペースが入力される)までv-modelは更新されません。自動提案された単語が選択されていない場合、v-modelは入力がフォーカスを失ったときに、入力の現在の表示テキストで更新されます。
  • IME構成(中国語、日本語など)を使用する場合、IME構成が完了するまでv-modelは更新されません。

範囲タイプ入力

rangeタイプの入力は、Bootstrap v4の.custom-rangeクラスを使用してレンダリングされます。トラック(背景)とサム(値)は、ブラウザ間で同じように表示されるようにスタイル設定されています。

範囲入力には、それぞれ0100minmaxの暗黙的な値があります。minおよびmaxプロパティを使用して、これらの新しい値を指定できます。

<template>
  <div>
    <label for="range-1">Example range with min and max</label>
    <b-form-input id="range-1" v-model="value" type="range" min="0" max="5"></b-form-input>
    <div class="mt-2">Value: {{ value }}</div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        value: '2'
      }
    }
  }
</script>

<!-- b-form-input-range.vue -->

デフォルトでは、範囲入力は整数値に「スナップ」します。これを変更するには、step値を指定できます。以下の例では、step="0.5"を使用してステップ数を2倍にしています。

<template>
  <div>
    <label for="range-2">Example range with step value</label>
    <b-form-input id="range-2" v-model="value" type="range" min="0" max="5" step="0.5"></b-form-input>
    <div class="mt-2">Value: {{ value }}</div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        value: '2'
      }
    }
  }
</script>

<!-- b-form-input-range-step.vue -->

注:範囲入力は(すべての入力タイプと同様に)値を文字列として返します。Number(value)parseInt(value, 10)parseFloat(value)を使用するか、numberプロパティを使用して、値をネイティブ数値に変換する必要がある場合があります。

注:Bootstrap v4 CSSには、入力グループ内の範囲入力のスタイル設定や、範囲入力での検証スタイル設定は含まれていません。ただし、BootstrapVueには、Bootstrap v4にスタイル設定が含まれるまで、これらの状況を処理するためのカスタムスタイル設定が含まれています。

コントロールのサイズ設定

高さを設定するには、sizeプロパティをそれぞれsmまたはlgに設定して、小または大にします。

幅を制御するには、入力を標準のBootstrapグリッド列内に配置します。

<b-container fluid>
  <b-row class="my-1">
    <b-col sm="2">
      <label for="input-small">Small:</label>
    </b-col>
    <b-col sm="10">
      <b-form-input id="input-small" size="sm" placeholder="Enter your name"></b-form-input>
    </b-col>
  </b-row>

  <b-row class="my-1">
    <b-col sm="2">
      <label for="input-default">Default:</label>
    </b-col>
    <b-col sm="10">
      <b-form-input id="input-default" placeholder="Enter your name"></b-form-input>
    </b-col>
  </b-row>

  <b-row class="my-1">
    <b-col sm="2">
      <label for="input-large">Large:</label>
    </b-col>
    <b-col sm="10">
      <b-form-input id="input-large" size="lg" placeholder="Enter your name"></b-form-input>
    </b-col>
  </b-row>
</b-container>

<!-- b-form-input-size.vue -->

注:入力タイプrangeは、<b-input-group>内に配置され、そのsizeプロパティが設定されていない限り、現在コントロールのサイズ設定をサポートしていません。

注:ネイティブHTMLの<input>属性のsize<input>に水平幅を文字数で設定します)はサポートされていません。スタイル、ユーティリティクラス、またはレイアウト行(<b-row>)と列(<b-col>)を使用して、目的の幅を設定してください。

コンテキストの状態

Bootstrapには、ほとんどのフォームコントロールのvalidおよびinvalid状態の検証スタイルが含まれています。

一般的に言えば、特定の種類のフィードバックには特定の状態を使用する必要があります

  • false(無効状態を示す)は、ブロックされた、または必須のフィールドがある場合に最適です。ユーザーはフォームを送信するために、このフィールドに適切に入力する必要があります。
  • true(有効状態を示す)は、フォーム全体でフィールドごとの検証を行い、残りのフィールドを通してユーザーを奨励したい場合に最適です。
  • null検証状態を表示しません(有効でも無効でもありません)

<b-form-input>にコンテキスト状態アイコンの1つを適用するには、stateプロパティをfalse(無効の場合)、true(有効の場合)、またはnull(検証状態なし)に設定します。

<b-container fluid>
  <b-row class="my-1">
    <b-col sm="3">
      <label for="input-none">No State:</label>
    </b-col>
    <b-col sm="9">
      <b-form-input id="input-none" :state="null" placeholder="No validation"></b-form-input>
    </b-col>
  </b-row>

  <b-row class="my-1">
    <b-col sm="3">
      <label for="input-valid">Valid State:</label>
    </b-col>
    <b-col sm="9">
      <b-form-input id="input-valid" :state="true" placeholder="Valid input"></b-form-input>
    </b-col>
  </b-row>

  <b-row class="my-1">
    <b-col sm="3">
      <label for="input-invalid">Invalid State:</label>
    </b-col>
    <b-col sm="9">
      <b-form-input id="input-invalid" :state="false" placeholder="Invalid input"></b-form-input>
    </b-col>
  </b-row>
</b-container>

<!-- b-form-input-states.vue -->

ライブ例

<template>
  <div role="group">
    <label for="input-live">Name:</label>
    <b-form-input
      id="input-live"
      v-model="name"
      :state="nameState"
      aria-describedby="input-live-help input-live-feedback"
      placeholder="Enter your name"
      trim
    ></b-form-input>

    <!-- This will only be shown if the preceding input has an invalid state -->
    <b-form-invalid-feedback id="input-live-feedback">
      Enter at least 3 letters
    </b-form-invalid-feedback>

    <!-- This is a form text block (formerly known as help block) -->
    <b-form-text id="input-live-help">Your full name.</b-form-text>
  </div>
</template>

<script>
  export default {
    computed: {
      nameState() {
        return this.name.length > 2 ? true : false
      }
    },
    data() {
      return {
        name: ''
      }
    }
  }
</script>

<!-- b-form-input-states-feedback.vue -->

ヒント:上記のマークアップと同様のマークアップを自動的に生成するには、<b-form-group>コンポーネントを使用します。

支援技術と色覚異常のユーザーへのコンテキスト状態の伝達

フォームコントロールの状態を示すためにこれらのコンテキスト状態を使用すると、視覚的な色ベースの表示のみが提供され、スクリーンリーダーなどの支援技術のユーザーや色覚異常のユーザーには伝わりません。

状態の代替表示も必ず提供してください。たとえば、フォームコントロールの<label>テキスト自体に状態に関するヒントを含めるか、追加のヘルプテキストブロックを提供することができます。

ARIA aria-invalid属性

特に支援技術の場合、無効なフォームコントロールにaria-invalid="true"属性を割り当てることもできます。

<b-form-input> が無効なコンテキスト状態(つまり、state が false)の場合、<b-form-input> の prop aria-invalidtrue に設定するか、サポートされている値のいずれかに設定することもできます。

  • false: エラーが検出されていないことを示します(デフォルト)。
  • true (または 'true'): 値が検証に失敗したことを示します。
  • 'grammar': 文法エラーが検出されたことを示します。
  • 'spelling': スペルミスが検出されたことを示します。

aria-invalid が明示的に設定されておらず、statefalse に設定されている場合、入力の aria-invalid 属性は自動的に 'true' に設定されます。

フォーマッタのサポート

<b-form-input> は、オプションで formatter prop に関数参照を渡すことで、フォーマットをサポートします。

フォーマット(フォーマッタ関数が指定されている場合)は、コントロールのネイティブ input および change イベントが発生したときに実行されます。ブール値の prop lazy-formatter を使用すると、フォーマッタ関数をコントロールのネイティブ blur イベントで呼び出すように制限できます。

formatter 関数は、入力要素の生の value と、フォーマットをトリガーしたネイティブ event オブジェクト(利用可能な場合)の 2 つの引数を受け取ります。

formatter 関数は、フォーマットされた値を文字列として返す必要があります。

formatter が提供されていない場合、フォーマットは実行されません。

<template>
  <div>
    <b-form-group
      label="Text input with formatter (on input)"
      label-for="input-formatter"
      description="We will convert your name to lowercase instantly"
      class="mb-0"
    >
      <b-form-input
        id="input-formatter"
        v-model="text1"
        placeholder="Enter your name"
        :formatter="formatter"
      ></b-form-input>
    </b-form-group>
    <p><b>Value:</b> {{ text1 }}</p>

    <b-form-group
      label="Text input with lazy formatter (on blur)"
      label-for="input-lazy"
      description="This one is a little lazy!"
      class="mb-0"
    >
      <b-form-input
        id="input-lazy"
        v-model="text2"
        placeholder="Enter your name"
        lazy-formatter
        :formatter="formatter"
      ></b-form-input>
    </b-form-group>
    <p class="mb-0"><b>Value:</b> {{ text2 }}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        text1: '',
        text2: ''
      }
    },
    methods: {
      formatter(value) {
        return value.toLowerCase()
      }
    }
  }
</script>

<!-- b-form-input-formatter.vue -->

注意: テキストのような入力(colorrangedatenumberemail など)以外の入力を使用する場合は、フォーマッタ関数が入力タイプに対して予期される形式(date -> '2000-06-01'、color -> '#ff0000' など)で値を返すようにしてください。フォーマッタは値を文字列として返す必要があります

注意: レイジーフォーマットを使用していない場合、カーソルが入力値の末尾にない場合、文字が入力されたにカーソルが末尾にジャンプすることがあります。提供されたイベントオブジェクトと event.target を使用して、ネイティブ入力の選択メソッドとプロパティにアクセスして、挿入ポイントを制御できます。これは読者の練習問題として残されています。

プレーンテキストの読み取り専用

フォームで <b-form-input readonly> 要素をプレーンテキストとしてスタイルしたい場合は、plaintext prop を設定します(readonly を設定する必要はありません)。これにより、デフォルトのフォームフィールドのスタイルが削除され、正しいマージンとパディングが保持されます。

plaintext オプションは、入力タイプ color または range ではサポートされていません。

数値のような入力でのマウスホイールイベントの無効化

一部のブラウザでは、数値のような入力にフォーカスがある状態でマウスホイールをスクロールすると、入力値が増減します。このブラウザの機能を無効にするには、no-wheel prop を true に設定するだけです。

データリストのサポート

データリストは、<option> タグのリストを含むネイティブ HTML タグ <datalist> です。ID をデータリストタグに割り当てることで、list 属性を追加することで、テキスト入力からリストを参照できます。

これにより、入力はコンボボックスまたはオートコンプリートの動作になり、既存の値を選択したり、新しい値を入力したりできます。

<template>
  <div>
    <b-form-input list="my-list-id"></b-form-input>

    <datalist id="my-list-id">
      <option>Manual Option</option>
      <option v-for="size in sizes">{{ size }}</option>
    </datalist>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        sizes: ['Small', 'Medium', 'Large', 'Extra Large']
      }
    }
  }
</script>

<!-- b-form-input-datalist.vue -->

BootstrapVue は、オプションの配列から <datalist> をすばやく作成するためのフォームヘルパーコンポーネント <b-form-datalist> を提供しています。

注意

  • データリストは、ブラウザの組み込みのオートコンプリートと連携して動作し、データリストのオプションが最初に表示され、その後にオートコンプリートのオプションが表示されます。データリストのオプションのみを表示するには、<b-form-input>autocomplete="off" を設定します。
  • データリストは、タイプが passwordrange、または color の入力フィールドには適用できません
  • すべてのブラウザが <datalist> を完全にサポートしているわけではなく、実装にバグがある可能性があります。データリストは拡張機能として扱い、現時点では依存しないことをお勧めします。すべてのブラウザでの完全なサポートの詳細については、Can I use を確認してください。

v-model 修飾子

Vue は、カスタムコンポーネントベースの入力の v-model.lazy.trim、および .number 修飾子を公式にサポートしておらず、悪いユーザーエクスペリエンスを生み出す可能性があります。Vue のネイティブ修飾子の使用は避けてください。

この問題を回避するために、<b-form-input> には、ネイティブ Vue v-model 修飾子 .trim.number および .lazy をエミュレートする 3 つのブール値 prop trimnumber、および lazy があります。lazy prop は、change/blur イベントで v-model を更新します。

注意

  • number prop は trim prop より優先されます(つまり、number が設定されている場合、trim は効果がありません)。
  • number prop を使用しているときに、値が数値として解析できる場合(parseFloat 経由)、型 Number の値を v-model に返し、それ以外の場合は元の入力値が型 String として返されます。これは、ネイティブの .number 修飾子と同じ動作です。
  • trim および number 修飾子の prop は、input または change イベントによって返される値に影響を与えません。これらのイベントは常に、オプションのフォーマット(修飾子を処理する v-model update イベントによって返される値とは一致しない場合があります)の後に、<textarea> のコンテンツの文字列値を返します。

デバウンスのサポート

lazy 修飾子 prop の代替として、<b-form-input> は、オプションでユーザー入力をデバウンスし、ユーザーが最後に文字を入力した(または change イベントが発生した)後、一定のアイドル時間後に v-model を更新することをサポートしています。ユーザーがアイドルタイムアウトが期限切れになる前に新しい文字を入力(または文字を削除)すると、タイムアウトが再開されます。

デバウンスを有効にするには、prop debounce をゼロより大きい任意の整数に設定します。値はミリ秒単位で指定されます。debounce0 に設定すると、デバウンスが無効になります。

注意: lazy prop が設定されている場合、デバウンスは発生しません

<template>
  <div>
    <b-form-input v-model="value" type="text" debounce="500"></b-form-input>
    <div class="mt-2">Value: "{{ value }}"</div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        value: ''
      }
    }
  }
</script>

<!-- b-form-input-debounce.vue -->

オートフォーカス

autofocus prop が設定されている場合、入力はドキュメントに挿入(つまり、マウント)されたとき、または Vue <keep-alive> コンポーネント内にあるときに再アクティブ化されたときに、自動的にフォーカスされます。この prop は、入力に autofocus 属性を設定するものではなく、入力がいつ表示されるかを判断することもできないことに注意してください。

ネイティブイベントとカスタムイベント

すべてのネイティブイベント(カスタムの input および change イベント以外)は、.native 修飾子を必要とせずにサポートされています。

カスタムの input および change イベントは、現在の value (フォーマットが適用された後)の単一の引数を受け取り、ユーザーの操作によってトリガーされます。

カスタムの update イベントは、入力値が渡され、v-model を更新する必要があるたびに(必要に応じて、inputchange、および blur の前に)発行されます。

.native 修飾子を使用することで、常にネイティブの input および change イベントにアクセスできます。

公開された入力プロパティとメソッド

<b-form-input> は、コンポーネント参照(つまり、ref<b-form-input ref="foo" ...> に割り当て、this.$refs['foo'].propertyName または this.$refs['foo'].methodName(...) を使用する)で、ネイティブの input 要素のプロパティとメソッドのいくつかを公開します。

入力プロパティ

プロパティ 注意
.selectionStart 読み取り/書き込み
.selectionEnd 読み取り/書き込み
.selectionDirection 読み取り/書き込み
.validity 読み取り専用
.validationMessage 読み取り専用
.willValidate 読み取り専用

入力メソッド

メソッド 注意
.focus() 入力にフォーカスを当てます
.blur() 入力からフォーカスを外します
.select() 入力内のすべてのテキストを選択します
.setSelectionRange()
.setRangeText()
.setCustomValidity()
.checkValidity()
.reportValidity()

これらのメソッドとプロパティの詳細については、https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement を参照してください。サポートは入力タイプによって異なります。

HTML5 <input> を代替として使用する

基本的な Bootstrap スタイルを持つ単純な入力が必要な場合は、以下を使用するだけで済みます。

<template>
  <div>
    <input v-model="value" type="text" class="form-control">
    <br>
    <p>Value: "{{ value }}"</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        value: ''
      }
    }
  }
</script>

<!-- native-input.vue -->

コンポーネント参照

<b-form-input>

コンポーネントエイリアス

<b-form-input> は、次のエイリアスを介して使用することもできます

  • <b-input>

注: コンポーネントエイリアスは、BootstrapVue 全体をインポートするか、コンポーネントグループプラグインを使用する場合にのみ使用できます。

プロパティ

すべてのプロパティのデフォルト値はグローバルに構成可能です。

プロパティ
(クリックすると昇順にソートされます)
タイプ
(クリックすると昇順にソートされます)
デフォルト
説明
aria-invalid
Boolean または Stringfalse指定された値で 'aria-invalid' 属性を設定します
autocomplete
Stringフォームコントロールの 'autocomplete' 属性値を設定します
autofocus
Booleanfalse`true` に設定すると、マウント時、または keep-alive の場合に再アクティブ化されたときに、コントロールに自動フォーカスを当てようとします。コントロールに `autofocus` 属性を設定しません
debounce
v2.1.0+
Number または String0ゼロより大きいミリ秒数に設定すると、ユーザー入力をデバウンスします。プロパティ 'lazy' が設定されている場合は効果がありません
disabled
Booleanfalse`true` に設定すると、コンポーネントの機能が無効になり、無効状態になります
form
Stringフォームコントロールが属するフォームの ID。コントロールの `form` 属性を設定します
formatter
Function入力のフォーマット用の関数への参照
id
Stringレンダリングされたコンテンツに `id` 属性を設定するために使用され、必要に応じて追加の要素 ID を生成するためのベースとして使用されます
lazy
v2.1.0+
Booleanfalse設定すると、'input' の代わりに 'change'/'blur' イベントで v-model を更新します。Vue の '.lazy' v-model 修飾子をエミュレートします
lazy-formatter
Booleanfalse設定すると、入力は(フォーマッタが指定されている場合)キーストロークごとではなく、フォーカスが外れたときにフォーマットされます
list
String関連付けられた datalist 要素またはコンポーネントの ID
max
Number または String入力の 'max' 属性に設定する値。数値のような入力で使用されます
min
Number または String入力の 'min' 属性に設定する値。数値のような入力で使用されます
name
Stringフォームコントロールの `name` 属性の値を設定します
no-wheel
Booleanfalse数値のような入力の場合、マウスホイールによる値の増減を無効にします
number
Booleanfalse設定すると、入力値をネイティブの数値に変換しようとします。Vue の '.number' v-model 修飾子をエミュレートします
placeholder
Stringフォームコントロールの `placeholder` 属性値を設定します
plaintext
Booleanfalseフォームコントロールを読み取り専用に設定し、コントロールをプレーンテキストのように表示します(境界線なし)
readonly
Booleanfalseフォームコントロールの `readonly` 属性を設定します
required
Booleanfalseフォームコントロールに `required` 属性を追加します
size
Stringコンポーネントの外観のサイズを設定します。 'sm'、'md'(デフォルト)、または 'lg'
state
Booleannullコンポーネントの検証状態の外観を制御します。 `true` は有効、`false` は無効、`null` は検証状態なし
step
Number または String入力の 'step' 属性に設定する値。数値のような入力で使用されます
trim
Booleanfalse設定すると、入力値の先頭と末尾の空白を削除します。Vue の '.trim' v-model 修飾子をエミュレートします
type
String'text'レンダリングする入力のタイプ。サポートされているタイプのドキュメントを参照してください
value
v-model
Number または String''入力の現在の値。結果は、`number` プロップを使用する場合を除き、常に文字列になります

v-model

プロパティ
イベント
valueupdate

イベント

イベント
引数
説明
blur
  1. event - ネイティブの blur イベント (フォーマット前)
入力からフォーカスが外れた後に発生します
change
  1. value - 入力の現在の値
ユーザーの操作によってトリガーされる change イベント。フォーマット後 ( 'trim' または 'number' プロップは含まない) および v-model が更新された後に発生します
input
  1. value - 入力の現在の値
ユーザーの操作によってトリガーされる入力イベント。フォーマット後 ( 'trim' または 'number' プロップは含まない) および v-model が更新された後に発生します
update
  1. value - フォーマット後の入力の値。値が変更されない場合は発生しません
v-model を更新するために発生します

個々のコンポーネントのインポート

次の名前付きエクスポートを使用して、個々のコンポーネントをプロジェクトにインポートできます

コンポーネント
名前付きエクスポート
インポートパス
<b-form-input>BFormInputbootstrap-vue

import { BFormInput } from 'bootstrap-vue'
Vue.component('b-form-input', BFormInput)

Vue.js プラグインとしてインポートする

このプラグインには、上記にリストされた個々のコンポーネントがすべて含まれていますプラグインには、コンポーネントエイリアスも含まれています。

名前付きエクスポート
インポートパス
FormInputPluginbootstrap-vue

import { FormInputPlugin } from 'bootstrap-vue'
Vue.use(FormInputPlugin)