JavaScriptで実装してて思ったこと_1

by opengl_8080

HTML

<div>
    姓名:
    苗字<input id="family-name" type="text" />
    名前<input id="first-name" type="text" />
</div>
<div>
    年齢:<input id="age" type="text" />
</div>
<div>
    性別:
    <label>
        男<input name="sex" type="radio" value="male" />
    </label>
    <label>
        女<input name="sex" type="radio" value="female" />
    </label>
</div>
<div>
    連絡先:
    <label>
        不要<input name="contact" type="radio" value="unnecessary" checked />
    </label>
    <label>
        必要<input name="contact" type="radio" value="necessary" />
    </label>
    メールアドレス:<input id="mail-address" type="text" disabled />
</div>
    
<button id="submit">送信</button>

CSS

div {
    margin-bottom: 10px;
}

input[type="text"] {
    width: 100px;
}

JavaScript

// 連絡先ラジオボタンの切り換えイベントハンドリング
$('[name="contact"]').change(function() {
    var selected = $('[name="contact"]:checked').val();
    if (selected === 'unnecessary') {
        $('#mail-address').attr('disabled', true);
    } else {
        $('#mail-address').attr('disabled', false);
    }
});

// 送信ボタンクリックのイベントハンドリング
$('#submit').click(function() {
    // 名前の必須入力チェック
    var familyName = $('#family-name').val();
    if (!familyName) {
        alert('苗字は必須入力です。');
        return;
    }
    
    var firstName = $('#first-name').val();
    if (!firstName) {
        alert('名前は必須入力です。');
        return;
    }
    
    // 年齢の必須入力チェック
    var age = $('#age').val();
    if (!age) {
        alert('年齢は必須入力です。');
        return;
    }
    
    // 年齢の数値チェック
    if (!$.isNumeric(age)) {
        alert('年齢は半角数値で入力してください。');
        return;
    }
    
    age = age - 0;
    
    if (age < 0 || 150 < age) {
        alert('年齢は 0 以上 150 以下で入力してください。');
        return;
    }
    
    // 性別入力チェック
    var sex = $('[name="sex"]:checked').val();
    
    if (!sex) {
        alert('性別を選択してください。');
        return;
    }
    
    // 連絡先必須入力チェック
    if ($('[name="contact"]:checked').val() === 'necessary') {
        var mailAddress = $('#mail-address').val();
        
        if (!mailAddress) {
            alert('メールアドレスを入力してください。');
            return;
        }
        
        if (!mailAddress.match(/^[a-zA-Z0-9@._-]+$/)) {
            alert('メールアドレスは半角英数記号で入力してください。');
            return;
        }
    }
    
    var input = {
        familyName: familyName,
        firstName: firstName,
        age: age,
        sex: sex,
        mailAddress: mailAddress
    };
    
    console.dir(input);
});