セッションストレージを使用して1ページずつ質問を回答させるフォームの作成方法
カテゴリ:WEB制作
タグ:
※当サイトはアフィリエイト広告を利用しています。
1ページずつ質問をさせて最後に結果を発表、もしくは確認画面を表示してフォーム送信させる。
主にアンケートページや診断ページなどで出会う場面が多い気がします。
今回はJavascriptで実装する『セッションストレージを使用して1ページずつ質問を回答させるフォームの作成方法』を紹介します。
コードの紹介
ページ1
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>名前の入力</title>
</head>
<body>
<h1>Question 1/3</h1>
<form id="nameForm">
<label for="name">あなたの名前は?</label>
<input type="text" id="name" name="name" required>
<input type="submit" value="次に進む">
</form>
<script>
// セッションストレージから名前を取得して、あればフォームに表示
window.onload = function() {
const storedName = sessionStorage.getItem('name');
if (storedName) {
document.getElementById('name').value = storedName;
}
};
document.getElementById('nameForm').addEventListener('submit', function(event) {
event.preventDefault();
const name = document.getElementById('name').value;
if (name === '') {
alert('名前が入力されていません');
} else {
sessionStorage.setItem('name', name);
window.location.href = 'question_2.html'; // 2ページ目に移動
}
});
</script>
</body>
</html>
ページ2
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>年齢の入力</title>
</head>
<body>
<h1>Question 2/3</h1>
<form id="ageForm">
<label for="age">あなたの年齢は?</label>
<select id="age" name="age" required>
<option value="">選択してください</option>
</select>
<input type="button" value="前に戻る" onclick="window.location.href='question_1.html'">
<input type="submit" value="次に進む">
</form>
<script>
// 年齢の選択肢を追加
const ageSelect = document.getElementById('age');
for (let i = 10; i <= 100; i++) {
const option = document.createElement('option');
option.value = i;
option.text = i;
ageSelect.appendChild(option);
}
// セッションストレージから年齢を取得して、あれば選択
window.onload = function() {
const storedAge = sessionStorage.getItem('age');
if (storedAge) {
ageSelect.value = storedAge;
}
};
document.getElementById('ageForm').addEventListener('submit', function(event) {
event.preventDefault();
const age = document.getElementById('age').value;
if (age === '') {
alert('年齢が選択されていません');
} else {
sessionStorage.setItem('age', age);
window.location.href = 'question_3.html'; // 3ページ目に移動
}
});
</script>
</body>
</html>
ページ3
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>性別の選択</title>
</head>
<body>
<h1>Question 3/3</h1>
<form id="genderForm">
<label>あなたの性別は?</label><br>
<input type="radio" id="male" name="gender" value="男性">
<label for="male">男性</label><br>
<input type="radio" id="female" name="gender" value="女性">
<label for="female">女性</label><br>
<input type="button" value="前に戻る" onclick="window.location.href='question_2.html'">
<input type="submit" value="結果を見る">
</form>
<script>
// セッションストレージから性別を取得して、あれば選択
window.onload = function() {
const storedGender = sessionStorage.getItem('gender');
if (storedGender) {
document.querySelector(`input[name="gender"][value="${storedGender}"]`).checked = true;
}
};
document.getElementById('genderForm').addEventListener('submit', function(event) {
event.preventDefault();
const gender = document.querySelector('input[name="gender"]:checked').value;
sessionStorage.setItem('gender', gender);
window.location.href = 'result.html'; // 結果表示ページに移動
});
</script>
</body>
</html>
結果を表示するページ
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>結果の確認</title>
</head>
<body>
<h2>入力結果の確認</h2>
<table>
<tr>
<th>あなたの名前は?</th>
<td id="resultName"></td>
</tr>
<tr>
<th>あなたの年齢は?</th>
<td id="resultAge"></td>
</tr>
<tr>
<th>あなたの性別は?</th>
<td id="resultGender"></td>
</tr>
</table>
<script>
// セッションストレージからデータを取得して表示
document.getElementById('resultName').textContent = sessionStorage.getItem('name');
document.getElementById('resultAge').textContent = sessionStorage.getItem('age');
document.getElementById('resultGender').textContent = sessionStorage.getItem('gender');
</script>
</body>
</html>
コードを解説
入力フォームについて
HTMLのフォームのパーツにはIDが振ってあります。
このID名でセッションストレージに値を格納していきます。
まず、ページのロードが完了したタイミングで該当ページの入力フォームに値があるかどうかをチェックして、値がある場合は入力フォームにセットします。
これはフォームを進めていく中でページを戻ったときに値が空にならないようにするためです。
セッションストレージからのデータの取得は『sessionStorage.getItem(‘name’);』を使用します。
値があるかどうかをチェックして値がある場合は『document.getElementById(‘name’).value』で入力フォームに値をセットします。
例えば名前の入力ページでは以下のようになります。
window.onload = function() {
const storedName = sessionStorage.getItem('name');
if (storedName) {
document.getElementById('name').value = storedName;
}
};
ラジオボタンの際は『document.querySelector(`input[name=”gender”][value=”${storedGender}”]`).checked』を使用ます。この辺りはコードの紹介を参考にしてください。
入力画面を進む際には『submit』ボタンをトリガーにして実行します。
document.getElementById('nameForm').addEventListener('submit', function(event) {});
この中に処理を書いていきます。
submitした際に値があるかどうかをチェックするため以下でフォーム送信のイベントをキャンセルします。
event.preventDefault();
IDから入力フォームに値があるかどうかをチェックします。
値が無ければアラートなどの処理、値があれば『sessionStorage.setItem(‘name’, name);』でセッションストレージに保存します。
その後、『window.location.href』で次のページに移動させます。
event.preventDefault();
const name = document.getElementById('name').value;
if (name === '') {
alert('名前が入力されていません');
} else {
sessionStorage.setItem('name', name);
window.location.href = 'question_2.html'; // 2ページ目に移動
}
入力フォームの移動はこれの繰り返しになります。
結果を表示するページ
結果の表示は簡単でセッションストレージからID名を指定して取り出し、値をセットするだけです。
// セッションストレージからデータを取得して表示
document.getElementById('resultName').textContent = sessionStorage.getItem('name');
document.getElementById('resultAge').textContent = sessionStorage.getItem('age');
document.getElementById('resultGender').textContent = sessionStorage.getItem('gender');
デモでは結果の表示のみですが入力フォームに『document.getElementById(‘○○○’).value』でセットして送信させればメールフォームとしても使用できます。
まとめ
以上、『セッションストレージを使用して1ページずつ質問を回答させるフォームの作成方法』でした。
導入はとても簡単ですのでアンケートや診断フォームなどの制作の際はぜひ、参考にしてください。




