11
4

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 5 years have passed since last update.

【JavaScript】フォーム入力中に'-'を自動で追加する(めも)

Last updated at Posted at 2019-09-01

郵便番号を入力するとき、ハイフンが自動挿入された方が親切かな。
と言うことで、入力中に自動で'-(ハイフン)'入れる機能を試してみました。
その時のメモです。

こちらも間違っているなどあれば指摘いただけると嬉しいです!

郵便番号の入力フォームイメージ

完成イメージです。
こんな感じで4桁目に'-'ハイフンを入力したい。
郵便番号.png

コードサンプル

実際に仕込んだjsは↓のとおり。

sample.js

$(function(){

  //郵便番号にハイフンを自動挿入するメソッド
  function insertStr(input){
    return input.slice(0, 3) + '-' + input.slice(3,input.length);
  }

  //入力時に郵便番号に自動でハイフンを付けるイベント
  $("#user_address_attributes_postal_code").on('keyup',function(e){
    var input = $(this).val();

    //削除キーではハイフン追加処理が働かないように制御(8がBackspace、46がDelete)
    var key = event.keyCode || event.charCode;
    if( key == 8 || key == 46 ){
      return false;
    }

    //3桁目に値が入ったら発動
    if(input.length === 3){
      $(this).val(insertStr(input));
    }
  });

  //フォーカスが外れた際、本当に4桁目に'-'がついているかチェック。なければ挿入するイベント
  //これでコピペした場合にも反応できるハズ?
  $("#user_address_attributes_postal_code").on('blur',function(e){
    var input = $(this).val();

    //4桁目が'-(ハイフン)’かどうかをチェックし、違ったら挿入
    if(input.length >= 3 && input.substr(3,1) !== '-'){
      $(this).val(insertStr(input));
    }
  });
}

sample.html.haml
= fields.text_field :postal_code, class:'xxxx', placeholder:'例) 123-4567',maxlength:'8'

html側で桁数指定してあげると親切かと。

クレジットカードも何となく行けそうかな。
Payjpのまとめをする時に合わせてメモしようかと思います。

以上

参考

「[JavaScript] 文字列の指定位置に文字を挿入・削除する」
 : https://javascript.programmer-reference.com/js-string-insert/
「javascript – “入力”イベントのバックスペースとデルを検出しますか?」
 : https://codeday.me/jp/qa/20181223/81200.html
「押したキーのキーコードを取得」
 : http://shanabrian.com/web/javascript/keycode.php

11
4
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
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?