郵便番号 入力フォーム


作成する内容

郵便番号の入力途中で候補となる住所を表示する。

ソースコード

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <h1>zipcloud住所検索</h1>
    <p>
        <input type="text" id="searchInput">
    </p>
    <p id="message"></p>
    <p id="results"></p>


<script>
    const searchInput = document.getElementById('searchInput');
    const zipcloudURL = "https://zipcloud.ibsnet.co.jp/api/search?zipcode=";


    searchInput.addEventListener('input', function() {
        const zipcode = this.value.trim(); // 入力されたキーワードを取得して、前後の空白を削除する
        const url = zipcloudURL + zipcode + "&limit=100";

        document.querySelector("#message").textContent = "郵便番号検索中...";
        // zipcloudからJSONデータを取得 ⇒ 取得後formatJSON呼び出し
        fetch(url)
            .then(response => response.json())
            .then(data => formatJSON(data));
    });

    // 住所を整形して表示する
    function formatJSON(json) {
        console.log(json);
        // テキストボックスクリア
        document.querySelector("#message").textContent = "";
        document.querySelector("#results").textContent = "";

        if (json.status !== 200) {    // エラーメッセージ有り
            document.querySelector("#message").textContent = json.message;
        } else if (json.results === null) {    // 存在しない郵便番号
            document.querySelector("#message").textContent = "郵便番号が存在しません";
        } else {    // 取得した住所情報を表示
            let table = "";
            for (let i = 0; i < json.results.length; i++) {
                table += "<table>";
                table += "<caption>候補" + (i + 1).toString() + "</caption>";
                table += "<tr><th>都道府県</th><td>" + json.results[i].address1 + "</td></tr>";
                table += "<tr><th>市郡区町村</th><td>" + json.results[i].address2 + "</td></tr>";
                table += "<tr><th>住所</th><td>" + json.results[i].address3 + "</td></tr>";
                table += "</table>";
            }
            document.querySelector("#results").innerHTML = table;
        }
    }
</script>

    
</body>
</html>

この記事が気に入ったらサポートをしてみませんか?