JS 入力確認#2・3 [データ取得・チェック]
流れ
HTMLとCSSで入力フォームの見た目を整える。
JavaScriptで入力内容の確認を行う。←今回
送信ボタンがクリックされたときの処理を実装する。←今回
確認画面の見た目を作成する。
確認画面に入力されたデータを表示する処理を追加する。
全体のまとめ
2と3を分けたけど、めんどくさいから一緒にします。ゆるちて
注意:HTMLとCSSは前回のコードを参照してください。
画面
必須項目に入力がないとき、その箇所を表示する。
すべての必須項目に入力がある場合とバリデーションチェックをクリアした場合のみ画面遷移が起き、確認画面に飛ぶ。
機能
エラーパターンをまとめる。
const errorList = new Map([
[0, "名前(漢字)は入力必須"],
[1, "名前(ひらがな)は入力必須"],
[2, "生年月日は入力必須"],
[3, "メールアドレスは入力必須"],
[4, "郵便番号は必須項目"],
[5, "住所は必須項目"],
[6, "パスワードは必須項目"],
[7, "パスワード(確認)は必須項目"],
[8, "ひらがなで入力してください"],
[9, "生年月日を確認してください"],
[10, "電話番号を確認してください"],
[11, "メールアドレスを確認してください"],
[12, "郵便番号を確認してください"],
[13, "パスワードが一致していません"],
]);
他にも追加するべき。
ソースコード
const prefectures = [
"北海道", "青森県", "岩手県", "宮城県", "秋田県",
"山形県", "福島県", "茨城県", "栃木県", "群馬県",
"埼玉県", "千葉県", "東京都", "神奈川県", "新潟県",
"富山県", "石川県", "福井県", "山梨県", "長野県",
"岐阜県", "静岡県", "愛知県", "三重県", "滋賀県",
"京都府", "大阪府", "兵庫県", "奈良県", "和歌山県",
"鳥取県", "島根県", "岡山県", "広島県", "山口県",
"徳島県", "香川県", "愛媛県", "高知県", "福岡県",
"佐賀県", "長崎県", "熊本県", "大分県", "宮崎県",
"鹿児島県", "沖縄県"
];
let selectPrefecture = document.getElementById('prefecture');
prefectures.forEach(function(prefecture) {
let option = document.createElement('option');
option.textContent = prefecture;
option.value = prefecture;
selectPrefecture.appendChild(option);
});
const address = document.getElementById('zipcode');
const zipcloudURL = "https://zipcloud.ibsnet.co.jp/api/search?zipcode=";
zipcode.addEventListener('input', function() {
const zipcode = this.value.trim(); // 入力されたキーワードを取得して、前後の空白を削除する
const url = zipcloudURL + zipcode + "&limit=100";
// zipcloudからJSONデータを取得 ⇒ 取得後formatJSON呼び出し
fetch(url)
.then(response => response.json())
.then(data => {
if (data.status !== 200) { // エラーメッセージ有り
// エラーの処理
} else if (data.results === null) { // 存在しない郵便番号
// エラーの処理
let addressMessage = document.getElementById("addressMessage");
addressMessage.textContent = "有効な郵便番号を入力してください。";
} else {
let prefecture = document.getElementById("prefecture");
let city = document.getElementById("city");
// 郵便番号に対応する都道府県名が存在する場合
if (data.results[0].address1) {
const prefectureName = data.results[0].address1;
// プルダウンメニューのオプションを選択状態にする
for (let i = 0; i < prefecture.options.length; i++) {
if (prefecture.options[i].value === prefectureName) {
prefecture.selectedIndex = i;
break;
}
}
}
if (data.results && data.results.length > 0) {
city.value = data.results[0].address2 + data.results[0].address3; // 最初の住所情報のみを表示
} else {
city.value = ""; // 住所情報が存在しない場合は空にする
}
addressMessage.textContent = "";
}
});
});
function submitForm() {
const errorList = new Map([
[0, "名前(漢字)は入力必須"],
[1, "名前(ひらがな)は入力必須"],
[2, "生年月日は入力必須"],
[3, "メールアドレスは入力必須"],
[4, "郵便番号は必須項目"],
[5, "住所は必須項目"],
[6, "パスワードは必須項目"],
[7, "パスワード(確認)は必須項目"],
[8, "ひらがなで入力してください"],
[9, "生年月日を確認してください"],
[10, "電話番号を確認してください"],
[11, "メールアドレスを確認してください"],
[12, "郵便番号を確認してください"],
[13, "パスワードが一致していません"],
]);
// 各データを取得
let nameKan = document.getElementById('nameKan').value;
let nameHira = document.getElementById('nameHira').value;
let maleRadio = document.getElementById("male");
let femaleRadio = document.getElementById("female");
let YMD = document.getElementById('YMD').value;
let phone = document.getElementById('phone').value;
let email = document.getElementById('email').value;
let zipcode = document.getElementById('zipcode').value;
let prefecture = document.getElementById('prefecture').value;
let city = document.getElementById('city').value;
let building = document.getElementById('building').value;
let password = document.getElementById('password').value;
let samePassword = document.getElementById('samePassword').value;
// 各データがnullではないかチェック
let checkNull = function(data, errorMessage) {
if (data.trim() === "") {
// エラーメッセージを表示
let errorMessageDiv = document.getElementById("errorMessage");
errorMessageDiv.textContent = errorMessage;
return true;
}
return false;
}
// 各データがnullの場合の処理
if (checkNull(nameKan, errorList.get(0)) ||
checkNull(nameHira, errorList.get(1)) ||
checkNull(YMD, errorList.get(2)) ||
checkNull(phone, errorList.get(10)) ||
checkNull(email, errorList.get(11)) ||
checkNull(zipcode, errorList.get(12)) ||
checkNull(prefecture, errorList.get(5)) ||
checkNull(city, errorList.get(5)) ||
checkNull(password, errorList.get(6)) ||
checkNull(samePassword, errorList.get(7))) {
// エラーがある場合は処理を中止
return;
}
// 電話番号のバリデーションチェック
if (!/^\d{10,11}$/.test(phone)) {
let errorMessageDiv = document.getElementById("errorMessage");
errorMessageDiv.textContent = errorList.get(10);
return;
}
// メールアドレスのバリデーションチェック
if (!/^\S+@\S+\.\S+$/.test(email)) {
let errorMessageDiv = document.getElementById("errorMessage");
errorMessageDiv.textContent = errorList.get(11);
return;
}
// パスワードが一致しているかチェック
if (password !== samePassword) {
let errorMessageDiv = document.getElementById("errorMessage");
errorMessageDiv.textContent = errorList.get(13);
return;
}
// エラーメッセージがないか確認
if (document.getElementById("addressMessage").textContent === "") {
// エラーメッセージがない場合はフォームを送信
document.getElementById("inputForm").submit();
} else {
// エラーメッセージがある場合はフォームを送信せずにユーザーに通知するなどの処理を行う
alert("エラーメッセージがあります。修正してください。");
}
}
この記事が気に入ったらサポートをしてみませんか?