LoginSignup
4
2

More than 3 years have passed since last update.

HTML5のフォームバリデーションをSPAの中で使う方法

Last updated at Posted at 2020-07-26

最近、素のHTMLやCSSをなるべく活用することに興味があります。
こういったベースの技術の方がフレームワークよりも息が長いので、一度学んだことを長期間役に立てることができるためです。

※もちろんフレームワークも使うときは使います。例えばNuxt.jsは大好きです。

今回は、HTML5のフォームバリデーション機能を、Nuxt.jsで構築したSPAの中で使ってみたいと思います。

課題

HTML5のフォームバリデーションは、通常はformのsubmitを実行したタイミングで実施されます。
でも、SPAではformをsubmitしません。
どうしましょう...

解決策

form.reportValidity() を使います。
これは、submitせずにバリデーションだけをかけるためのメソッドです。

※2020年7月時点のMDNによれば、IE以外の全ての主要ブラウザでサポートされているようです。安心して使えますね。
 https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/reportValidity

コード例

VInputItem.vue
<template>
  <form>
    <label>
      数量
    </label>
    <input
      type="number"
      v-model="quantity"
      min="0"
      max="999"
      @chenge="onChengeInput"
    />
  </form>
</template>

<script>
export default {
  data() {
    return {
      unitprice: 0,
      quantity:  0,
    }
  },
  methods: {
    onChangeInput(event){  
      this.$el.reportValidity()
    },
  },
}
</script>

ポイント

この例では、直近のform要素を取得するために$elを使っています。
$elはVue.jsでルート要素を取得するためのプロパティです。
このサンプルコンポーネントでは、template直下のルート要素がformなので、それを一発で取得できています。

※コンポーネント内の要素の構造によっては、$refsを用いて参照する方法もあると思います。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2