LoginSignup
2

More than 1 year has passed since last update.

郵便番号を入力すると住所を自動入力してくれるフォーム【コピペでOK】

Posted at

コード全文

ECサイトのフォーム等でよく見る郵便番号で住所が自動入力されるやつを郵便番号検索APIを活用して作成してみました。
下記のコードをコピペすれば最低限使える1画面が完成するので用途に合わせてHTMLなど改変してください。

動作確認用サンプルページ

addressForm.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>郵便番号フォーム</title>
</head>
<body>

<h3>郵便番号で住所が自動入力されるフォーム</h3>
<p>郵便番号で探す</p>
<div>
  <input type="text" id="searchBox" placeholder="例:1638001(ハイフンなし)" onkeyup="inputCheck ()">
  <button type="button" onclick="searchAddress ()">探す</button>
</div>
<div id="check" ></div>
<p>住所:<input type="text" id="addressForm"></p>
<p>番地:<input type="text"></p>
<button type="button" onclick="dummyPost ()">送信</button>

<script>
  async function searchAddress () {
    const postalCode = document.getElementById("searchBox").value;
    const url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + postalCode;
    const response = await fetch(url);
    const data = await response.json();
    if(!(data['results'])) {
      document.getElementById( "check" ).innerHTML = '該当データなし';
    } else {
      const address = data['results'][0]['address1'] + data['results'][0]['address2'] + data['results'][0]['address3']
      document.getElementById( "addressForm" ).value = address;
    }
  }

  function inputCheck() {
    const inputValue = document.getElementById( "searchBox" ).value;
    if (!(inputValue.match(/^[0-9]+$/)) || !(inputValue.length === 7)) {
      document.getElementById( "check" ).innerHTML = '半角数字7桁で入力してください!';
    } else {
      document.getElementById( "check" ).innerHTML = '';
    }
  }

  function dummyPost () {
    alert('送信はしないぜ')
  }
</script>
</body>
</html>

コード解説

使った機能をそれぞれ備忘録としてまとめておく

WebAPI

郵便番号検索API
今回はこちらのWebAPIを使用させていただきました。
利用方法は上記サイトに詳しく書かれているのでそちらを参照してください。

async / await

JSで非同期処理を書く際に使う。
同期処理と非同期処理については「この記事にある図」と「この記事にある例え話」を組み合わせて読むと非常にわかりやすかった。

const response = await fetch(url);
const data = await response.json();

今回のコードで言うとこの部分が該当する。
JS内の処理は同期処理だけれどAPIを叩いてるところは非同期処理となっている。
awaitをつけることで「値が返ってくるまで次の処理に進むのは待ってくれよなー頼むよー」ができるようになる。
※awaitがないとresponseが空のまま処理が進んでエラーになる。
awaitはasyncで定義することで使えるようになる。

HTML

  • placeholder
    フォーム等にあらかじめ入力されている灰色の文字を作れる
  • onclick
    クリックされたらJSを発火させる時に使える
  • onkeyup
    キーが離されたのを検知してJSを発火させる時に使える

おわりに

認識違いなどあればコメントいただけますと幸いです。
一旦は自分のノート的な形で残しておきたかったので、もう少し勉強してわかりやすく修正します。

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
2