これはあなたの質問に直接答えないかもしれませんが、この問題は簡単な設計レベルの調整で解決できます。これがすべてのユースケースに100%当てはまるわけではないことを理解していますが、アプリケーションのユーザーフローを再考し、次の設計提案を実装できるかどうか検討することを強くお勧めします。
私は選択肢をハッキングよりも、何かを簡単に行うことを決めonChange()
、実際にこの目的のために意味されなかった他のイベントを使用して(blur
、click
など)
私がそれを解決した方法:
値のないselectなどのプレースホルダーオプションタグを単に付加するだけです。
したがって、次の構造を使用する代わりに、hack-yの代替案が必要になります。
<select>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
これを使用することを検討してください:
<select>
<option selected="selected">Select...</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
したがって、このようにすると、ユーザーのコードがよりシンプルになりonChange
、ユーザーがデフォルト値以外のものを選択するたびに、コードは期待どおりに機能します。disabled
もう一度選択させたくない場合は、最初のオプションに属性を追加して、オプションから何かを強制的に選択させて、onChange()
火災を引き起こすこともできます。
この回答の時点で、私は複雑なVueアプリケーションを作成していますが、この設計の選択によってコードが大幅に簡略化されたことがわかりました。この問題を解決するまでこの問題に何時間も費やしましたが、コードの多くを書き直す必要はありませんでした。ただし、ハックな代替案を使用した場合、ajaxリクエストの二重発火などを防ぐために、エッジケースを考慮する必要がありました。これも、デフォルトのブラウザ動作を素晴らしいボーナスとして台無しにしない(モバイルでテスト済み)ブラウザも同様です)。
場合によっては、一歩下がって最も簡単なソリューションの全体像を考える必要があるだけです。