まず、ユーザーがフォームに送信した内容をキャプチャする必要があります。 JavaScript を使用して、フォームの送信時にページが更新されないようにすることで、入力を失わずに計算を処理できるようにします。
document.getElementById("costForm").addEventListener("submit", function (event) { event.preventDefault(); // Prevents the page from reloading // 1. Get the values from the form const name = document.getElementById("name").value; const checkInDate = document.getElementById("checkInDate").value; const nights = parseInt(document.getElementById("nights").value); const roomType = document.querySelector('input[name="roomType"]:checked').value; const discount = document.querySelector('input[name="discount"]:checked').value; const adults = parseInt(document.getElementById("adults").value); const children = parseInt(document.getElementById("children").value); // 2. Check room occupancy const maxOccupancy = getMaxOccupancy(roomType); if (adults children > maxOccupancy) { document.getElementById("messageDiv").innerText = `The room you selected cannot hold your group. Max occupancy is ${maxOccupancy}.`; return; } // 3. Clear previous messages and calculate the cost document.getElementById("messageDiv").innerText = ""; calculateCost(roomType, checkInDate, nights, discount); });
それでは、各部屋タイプに何人宿泊できるかを確認する関数を作成してみましょう。ホテルの客室には収容できるゲストの数に制限があるため、この機能は重要です。
function getMaxOccupancy(roomType) { if (roomType === "queen") { return 5; // Queen rooms can hold up to 5 people } else if (roomType === "king") { return 2; // King rooms can hold up to 2 people } else if (roomType === "suite") { return 6; // 2-Bedroom Suites can hold up to 6 people } }
次に、チェックイン日と部屋タイプに基づいて 1 泊あたりの宿泊料金を計算します。料金はハイシーズン (6 月から 8 月) には高く、その他の期間には低くなります。
function getRoomRate(checkInDate, roomType) { const date = new Date(checkInDate); // Convert the check-in date to a Date object const month = date.getMonth() 1; // Get the month (months are 0-indexed) let rate; // Variable to store the room rate // High season (June to August) rates are more expensive if (month >= 6 && month内容:
最後に、滞在費の総額を計算します。割引を適用し、税金を追加して最終合計を算出します。
function calculateCost(roomType, checkInDate, nights, discount) { // 1. Get the room rate per night const roomRate = getRoomRate(checkInDate, roomType); // 2. Calculate the total room cost before discounts let totalRoomCost = roomRate * nights; // 3. Apply the discount (if any) let discountRate = 0; // Start with no discount if (discount === "aaa") { discountRate = totalRoomCost * 0.1; // 10% discount for AAA/Senior } else if (discount === "military") { discountRate = totalRoomCost * 0.2; // 20% discount for Military } // Subtract the discount from the total room cost const discountedCost = totalRoomCost - discountRate; // 4. Calculate the tax (12% of the discounted total cost) const tax = discountedCost * 0.12; // 5. Calculate the final total cost, including tax const totalCost = discountedCost tax; // 6. Display the results on the page document.getElementById("result").innerHTML = `Room Rate per Night: $${roomRate.toFixed(2)}
Number of Nights: ${nights}
Discount Amount: $${discountRate.toFixed(2)}
Tax: $${tax.toFixed(2)}
Total Cost (with tax): $${totalCost.toFixed(2)}
`; }
それで終わりです! JavaScript を使用して、シンプルでありながら機能的な Room Cost Estimator を構築しました。
このコードの GitHub リポジトリはここにあります。ページの基本的な HTML およびブートストラップ スタイルを含む
サニー・ケオ
クリエイティブ デベロッパー & デザイナー
フロントエンド開発学生 |イヤーアップユナイテッド
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3