(function iife() {
"use strict";
function getPriceEl(form) {
return form.querySelector(".license_price");
}
function getCheckboxes(form) {
return form.querySelectorAll("input[type='checkbox']");
}
function getCheckboxPrice(checkbox) {
return checkbox.parentNode.querySelector(".license_price").innerHTML;
}
function getTotalEl(form) {
return form.querySelector(".totalprice");
}
function updatePrice(select, prices) {
var price = getPriceEl(select.form);
price.innerHTML = "€" + prices[select.selectedIndex];
}
function isChecked(checkbox) {
return checkbox.checked;
}
function priceToValue(price) {
return Number(price.split("€")[1]);
}
function sum(val1, val2) {
return val1 + val2;
}
function checkboxTotals(checkboxes) {
return Array.from(checkboxes)
.filter(isChecked)
.map(getCheckboxPrice)
.map(priceToValue)
.reduce(sum, 0);
}
function updateTotal(form) {
var total = getTotalEl(form);
var dropdownPrice = priceToValue(getPriceEl(form).innerHTML);
var checkboxTotal = checkboxTotals(getCheckboxes(form));
var totalPrice = dropdownPrice + checkboxTotal;
total.innerHTML = "€" + totalPrice;
console.log(totalPrice);
}
function updatePriceHandler(evt) {
var select = evt.target;
var form = select.form;
updatePrice(select, prices);
updateTotal(form);
}
function updateTotalHandler(evt) {
var form = evt.target.form;
updateTotal(form);
}
var prices = [99, 236, 1475];
var form = document.querySelector("#order");
var select = form.elements.license_type;
var checkboxes = getCheckboxes(form);
select.addEventListener("change", updatePriceHandler);
checkboxes.forEach(function addCheckboxHandler(checkbox) {
checkbox.addEventListener("click", updateTotalHandler);
});
});
This website says that there is no syntax error →
https://esprima.org/demo/validate.html
However the browser has a different story to tell:
What can be fix?