コース一覧
JavaScript道場 ハレノヒ珈琲を動かす10問
総合 予約ページ完成

JavaScript道場 ハレノヒ珈琲を動かす10問

JavaScript の基本を終えた人が、白紙から画面を動かす演習専用コースです。解説はありません。依頼と完成条件だけを読み、自分でコードを組み立てます。HTML と CSS は用意してあるので、書くのは JavaScript だけです。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。クリックへの応答から始まり、クラスの切り替え、入力の監視、配列の絞り込みと描画、フォームの検証、タブの出し分けを経て、最後は予約ページの一連の流れまで、10問で主要な操作を一巡します。1問15分から45分、全10問で約5時間です。JavaScript入門を終えて「読めるけれど自分では書けない」と感じている方に向いています。

1
初段
01. ボタンで挨拶を出せ15分
02. ダークモード切替15分
03. 文字数カウンター20分
04. メニューの絞り込み25分
2
中段
01. 予約フォームの検証25分
02. 配列からメニューを描画せよ25分
03. タブ切替30分
04. 営業中か準備中かを判定せよ30分
3
師範
01. 時計の表示を整えよ30分
02. 総合 予約ページ完成45分

総合 予約ページ完成

師範 / 目安 45分

陽葵さんが、いつになく静かな顔で座っています。「最後のお願い。予約ページを本気で作りたいの。人数を選んで、名前と時間を入れて、間違いがあったら教えてくれて、送ったら確認画面が出て、その時間が営業時間外なら止めてくれる。ぜんぶ入りで」

道場の10問目、最後の依頼です。

新しく覚える書き方はありません。ここまでの9問で使った部品を、1つのフローに組み上げるだけです。人数の増減はボタンのクリック、入力の検証は submit と preventDefault、確認画面の出し入れは hidden クラスの付け外し、営業時間の判定は問8の isOpen(hour)。持っている部品を正しい順に並べられるか、それだけを問います。

一息に書こうとすると必ず崩れます。順番があります。まず人数の増減だけを作って動かす。次に submit を止めてエラーを出すところまで。最後に確認画面を出す。1つ動くたびに画面で確かめて、次に進んでください。

検証の順序にも意味があります。エラーは1つ見つかったら、その時点で止めて確認画面を出さない。名前が空なのに確認画面が出てしまうと、お客さんは送信できたと思ってしまいます。エラーのときは前の確認画面も必ず閉じてください。逆に、通ったときはエラー文を消すのを忘れないでください。エラー文は自分で消さないかぎり残ります。

HTML と CSS は読み取り専用です。人数の増減ボタン、名前と時刻の入力欄、送信ボタン、エラーの行、そして最初は hidden が付いた確認画面が用意してあります。

完成条件

人数の増減

  • 人数は 1 から始め、#count-up で1増やし、#count-down で1減らして #guests に出す
  • 1未満と6より大きい人数にはしない

検証

  • form の submit を e.preventDefault() で止める
  • 名前が空なら #error に「お名前を入力してください」を出し、確認画面は出さない
  • 時刻が営業時間 (7以上22未満) の外なら #error に「営業時間は7時から22時までです」を出し、確認画面は出さない。判定は isOpen(hour) を作って使う

確認画面

  • すべて通ったら #error を空にし、#confirm から hidden を外す
  • #confirm-text に、名前・人数・時刻の3つが読み取れる文を出す

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。


これで10問すべてです。陽葵さんは予約フォームに自分で名前を入れて、確認画面が出るのを見届けると、両手で頬をおさえて言いました。「ハレノヒ珈琲、ネット予約始めました!」

師範が奥から一枚の紙を持って出てきます。そこには JavaScript道場・師範代を允許する と書かれていました。ボタンひとつで挨拶を出すところから始めて、いまあなたは、動く予約フローを白紙から組み上げられます。

課題

  1. 人数を1から始め、#count-up で1増やし #count-down で1減らして #guests に出す
  2. 人数は1未満にも6より大きくもしない
  3. form の submit を e.preventDefault() で止める
  4. 名前が空なら #error にお名前を入力してくださいを出し、確認画面は出さない
  5. isOpen(hour) を作り、時刻が7以上22未満の外なら #error に営業時間のエラーを出して確認画面は出さない
  6. すべて通ったら #error を空にし、#confirm から hidden を外す
  7. #confirm-text に名前・人数・時刻の3つが読み取れる文を出す

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 3つの機能を一度に書かないでください。人数の増減だけを作って動かす、次に submit を止めてエラーを出す、最後に確認画面を出す。1つ動くたびに画面で確かめます

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
index.html
style.css
script.js
プレビュー

できているか

  • プラスを2回押すと人数が3名になる
  • 名前が空のまま送るとエラーになり、確認画面は出ない
  • 営業時間外の23時で送ると営業時間のエラーになる
  • 正しく入れて送ると確認画面に名前と人数と時刻が出る
エディタを読み込んでいます