Я выполняю практическое задание для своего цифрового класса и застрял в форме бронирования. У меня есть две функции, которые должны запускаться по нажатию кнопки, одна проверяет форму, проверяя, все ли заполнено, а другая запускает основной цикл. Я сканировал этот веб-сайт для подобных ситуаций, но я просто не могу разобраться.
Я попытался добавить функцию validForm в мой основной цикл, чтобы он сначала выполнялся, а затем основной цикл. Затем я попытался запустить сам основной цикл без функции validForm, но он запустил основной цикл, ТО проверил на наличие необходимых форм (мне нужно, чтобы он проверил на наличие необходимых форм, а затем запустил цикл). Я просто не могу решить это.
--- сокращенная форма (html) ---
<form id="thisForm" method="post" name="thisForm" onsubmit="validForm()">
<label>First name:</label> <input autocomplete="on" id="firstNameInput" placeholder="John" required="" title="Enter your first name" type="text"><br>
<label>Last name:</label> <input autocomplete="on" id="lastNameInput" placeholder="Smith" required="" title="Enter your last name" type="text"><br>
<label>Age:</label> <input autocomplete="on" id="ageInput" placeholder="18" required="" title="Enter your age" type="number"><br>
<label>Email address:</label> <input autocomplete="on" id="emailInput" placeholder="johnsmith@gmail.com" required="" title="Enter your email address" type="email">
<button class="button button1" id="submit" onsubmit="loopForm(form)">Confirm Booking</button>
<button class="button button2" id="reset" onclick="index.html">Reset</button>
</form>
--- сокращенный javascript ---
function validForm() {
var x = document.forms["myForm"]["numberOfDays"].value;
if (x == "") {
alert("Name must be filled out");
return false;
}
}
function loopForm(form) { //this function is called once the confirm button is clicked, sends data to firebase
alert('Test alert for confirm booking');
var amountOfDays = numberOfDays.value;
var insuranceFee = 20;
var BOOKINGFEE = 50;
var sum = 0 ;
var cbResults = ' ';
for (var i = 0; i < form.elements.length; i++) {
if (form.elements[i].type == 'radio') {
if (form.elements[i].checked == true) {
vehicleResult = form.elements[i].value;
vehicleCost = form.elements[i].dataset.price;
insuranceCost = Math.round(insuranceFee + vehicleCost * amountOfDays);
//ouputs
outputDays.innerHTML = amountOfDays; //working
outputTest.innerHTML = insuranceCost; //wrong but working
outputVehicle.innerHTML = vehicleResult; //working
}
}
if (form.elements[i].type == "checkbox") {
if (form.elements[i].checked == true) {
cbResults += form.elements[i].value + ', ';
sum = sum + parseInt(form.elements[i].dataset.price);
alert(cbResults + "$" + sum);
outputExtras.innerHTML = cbResults;
totalCost = Math.round(insuranceCost + sum + BOOKINGFEE); //devired values
outputCost.innerHTML = '$' + totalCost;
}
}
}
}
Я ожидаю, что вывод перейдет квместо этого, сводная информация о бронировании, страница проверяет наличие обязательных полей, а затем обновляется, прежде чем я вижу сводную информацию о бронировании.