3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails6】JavaScriptによる「入力フォームの内容のリアルタイムチェック機能」の実装例

Last updated at Posted at 2021-02-07

※2022年から技術系の記事は個人ブログに投稿しております。ぜひこちらもご覧ください→yamaday0u Blog

JavaScriptで以下のような「入力フォームの内容のリアルタイムチェック機能」を実装してみたので、その方法を共有します。

Image from Gyazo

ポイントは、jQueryのようなライブラリは使用せず、そのままのJavaScriptで実装したことです。

ネットで検索してみると、意外とそのままのJavaScriptで実装した例を紹介する記事がヒットしなくて、jQueryを使った例ばかりだったので、今回記事にしてみようと思いました。

実行環境

Rails 6.0.3.4

各ファイルの記述

今回のメインである「入力フォームの内容のリアルタイムチェック機能」を実装する記述です。

正規表現の/^[\A\d+\z]/について補足します。半角数字にマッチする正規表現である\A\d+\z^[]で囲うと、半角数字でないものにマッチする正規表現になります。

app/javascript/validation.js
const validation = () => {
  //半角数字でないものにマッチする正規表現を変数化
  const pricePattern = /^[\A\d+\z]/;
  //エラーメッセージを表示する要素を変数化
  const priceErrorMessage = document.getElementById("price-error");
  //フォームの値が入る要素を変数化
  const itemPrice = document.getElementById("item-price");

  //キーボード操作がされた時にイベント発火
  addEventListener("keyup", e => {
    if (pricePattern.test(itemPrice.value) || itemPrice.value == "") {
      //item-priceが半角数字か空白ならエラーメッセージは表示しない
      priceErrorMessage.style.visibility="hidden";
    }else {
      //item-priceが全角数字ならエラーメッセージを表示する
      priceErrorMessage.style.visibility="visible";
    }
  })
}

window.addEventListener("load", validation)

application.jsに上記のvalidation.jsを読み込みます。

app/javascript/packs/application.js
require("@rails/ujs").start()
require("@rails/activestorage").start()
require("channels")
require("../item_price")
require("../validation") //validation.jsを読み込む

ビューファイルの抜粋です。

app/views/items/new.html.erb
<%# 販売価格 %>
<div class="sell-price">
  <div class="weight-bold-text question-text">
    <span>販売価格<br>(¥300〜9,999,999)</span>
    <a class="question" href="#">?</a>
  </div>
  <div>
    <%# validation.jsで以下の1行を操作する %>
    <div id="price-error" class="price-error">価格は半角数字で入力してください</div>
    <div class="price-content">
      <div class="price-text">
        <span>価格</span>
        <span class="indispensable">必須</span>
      </div>
      <span class="sell-yen">¥</span>
      <%= f.text_field :price, class:"price-input", id:"item-price", placeholder:"例)300" %>
    </div>
    <div class="price-content">
      <span>販売手数料 (10%)</span>
      <span>
        <span id='add-tax-price'></span></span>
    </div>
    <div class="price-content">
      <span>販売利益</span>
      <span>
        <span id='profit'></span></div>
    </span>
  </div>
</div>

ビューファイルのスタイルシートの抜粋です。

app/assets/stylesheets/items/new.css
.price-error {
  visibility: hidden;
  color: red;
}

参考資料

【Qiita】素のJavaScriptでFormバリデーション

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?