# Vue.jsのinputイベントがselectタグで発火しない(Internet Explorer 11)原因と対応
Internet Explorer 11において、Vue.jsのinput
イベントがselect
タグで発火しない。
# 原因
Vue.jsの問題ではなく、Internet Explorer 11では、次のように記述してもselect
タグでinput
イベントが発火しない。(ChromeやFirefoxでは発火する)
<select @input="updateValue">
# 対応
@input
ではなく@change
を使用すればよい。
<select @change="updateValue">
# v-modelはv-bind:valueとv-on:inputの組み合わせと等価とは限らない
以前v-model
は:value
と@input
イベントを組み合わせたものと等価という記事を読んだことがあった。
しかし、公式サイトにはv-model
がtext
やselect
、radio
によって異なるイベント、値を使うことが記載されている。
v-model は、内部的には input 要素に応じて異なるプロパティを使用し、異なるイベントを送出します:
テキストと複数行テキストは、value プロパティと input イベントを使用します
チェックボックスとラジオボタンは、checked プロパティと change イベントを使用します
選択フィールドは、value プロパティと change イベントを使用します
https://jp.vuejs.org/v2/guide/forms.html (opens new window)
つまり、text
の場合、たしかにv-model
は:value
と@input
を組み合わせたものと等価だ。
<input type=text v-model="message">
⇅この2つは等価
<input
:value="message"
@input="message = $event.target.value"
>
しかし、select
の場合は@input
ではなく@change
と等価ということ。
よってselect
やradio
で独自のコンポーネントを作る際は@input
イベントではなく、@change
イベントを指定するべきだ。
<select v-model="selected">
⇅この2つは等価
<select
:value="selected"
@change="selected = $event.target.value"
>
・参考
https://github.com/vuejs/vue/issues/4701 (opens new window)