前提
最近JavaScriptを学び始めたビギナーです。
HTMLとJavaScriptで簡単なアンケートフォームを作成してます。
仕様は以下のようなものです↓
・ボタンクリック後に記載内容の有無を調べるバリデーション
・空の場合はアラートで警告
・入力値をセッションに保存
・保存が確認できたらページを更新
・保存したセッション内容をデフォルトでは非表示にしているliタグ内に入れ表示
実現したいこと
・リロード後も関数rewriteで実行する内容を維持したい
発生している問題
リロードされた後に対象要素のテキストを変更させ、
その要素を表示させたいが、リロード後に全て消えてしまう。
該当のソースコード
HTML/JavaScript
1<!DOCTYPE html> 2<html> 3<head> 4 <title>アンケート</title> 5 <style> 6 #conf{ 7 display: none; 8 } 9 </style> 10</head> 11<body> 12 <h1>アンケートフォーム</h1> 13 <form id="a_form"> 14 氏名:<input type="text" name="name" value="" /> 15 年齢:<input type="number" name="age" value="" /> 16 </form> 17 18 <button id="a_bt">確認</button> 19 20 <ul id="conf"> 21 <li class="name"></li> 22 <li class="age"></li> 23 </ul> 24 25 <script> 26 //確認ボタンを押したイベントを取得 27 document.getElementById('a_bt').addEventListener('click',function(){ 28 var savedFormData = saveInput(getFormInput()); 29 var {name, age} = savedFormData; 30 if (savedFormData !== ' ') { 31 loadPage(); 32 rewrite(name,age); 33 } 34 }); 35 36 //formの入力値を取得し、空かどうかをチェック 37 function getFormInput() { 38 var messages = []; 39 var nameInput = document.querySelector('[name=name]').value; 40 var ageInput = document.querySelector('[name=age]').value; 41 //入力が空だった時はアラートを表示 42 if (nameInput === '' || nameInput === null) { 43 messages.push('氏名を入力して下さい。'); 44 } 45 if (ageInput === '' || ageInput === null) { 46 messages.push('年齢を入力して下さい。'); 47 } 48 if (messages.length > 0) { 49 alert(messages.join('\n')); 50 } else { 51 return { 52 nameInput, 53 ageInput 54 }; 55 } 56 } 57 //入力があれば、入力値をセッションに保存 58 function saveInput(func) { 59 if (func !== ' '){ 60 var {nameInput,ageInput} = func; 61 if (window.localStorage) { 62 sessionStorage.setItem('name',nameInput); 63 sessionStorage.setItem('age',ageInput); 64 const name = sessionStorage.getItem('name'); 65 const age = sessionStorage.getItem('age'); 66 return { 67 name, 68 age 69 }; 70 } 71 } else { 72 return false; 73 } 74 } 75 //セッションに保存したら、画面を更新 76 function loadPage() { 77 document.location.reload(); 78 //console.log('hello'); 79 return true; 80 } 81 //保存したセッションがconfのそれぞれのliタグ内に表示 82 function rewrite(name,age) { 83 var savedFormData = saveInput(getFormInput()); 84 var {name, age} = savedFormData; 85 document.querySelector('.name').textContent = name; 86 document.querySelector('.age').textContent = age; 87 //この時、formは非表示、ulを表示する 88 var form = document.getElementById('a_form'); 89 var lists = document.getElementById('conf'); 90 form.style.display = 'none'; 91 lists.style.display = 'block'; 92 } 93 </script> 94</body> 95</html>
試したこと
document.location.reload();の箇所を、
代わりにconsole.log('hello');など適当なものに変更すると
ほかは思う通りの動きをするので、これが問題なんだろうなとは思うのですが...
解決策が思い浮かばず詰まってしまったため、投稿しました。