Puisque les valeurs de vos boutons radio correspondent au type de vacances, vous devrez rechercher le coût en fonction de ce type. Vous devez modifier votre price
dans un objet afin que vous puissiez trouver le coût par type.
Vous pouvez également ajouter un formateur de devises pour faire bonne mesure.
const form = document.forms.vacation;
const totalElement = document.querySelector('#total');
const currencyFormatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
const costLookup = {
'destino' : { cost: 100 },
'mantaña' : { cost: 130 },
'playa' : { cost: 150 }
};
function CalculateTotal(event) {
event.preventDefault();
const numberOfGuests = form.elements.number.value;
const typeOfDestiny = costLookup[form.elements.destino.value].cost;
const total = numberOfGuests * typeOfDestiny;
totalElement.textContent = currencyFormatter.format(total);
return false;
}
button[type="submit"] { display: block; }
.data-label { display: grid; grid-template-columns: 10em 1fr; }
#destino-info { display: inline-block; }
<form id="vacation" onSubmit="CalculateTotal(event)">
<div role="group" aria-labelledby="info">
<p id="info">Datos de clientes</p>
<label class="data-label">Nombre
<input type="name" name="nombre" >
</label>
<label class="data-label">Email
<input type="email" name="email" >
</label>
<label class="data-label">Numero de personas
<input type="number" min="1" name="number" value="number">
</label>
</div>
<div role="group" aria-labelledby="destino-info">
<p id="destino-info">Destino:</p>
<label class="destino-label">
<input type="radio" name="destino" value="destino" checked >
Cuidad
</label>
<label class="destino-label">
<input type="radio" name="destino" value="mantaña">
Montaña
</label>
<label class="destino-label">
<input type="radio" name="destino" value="playa">
Playa
</label>
<button type="submit">Calcular tarifa</button></div>
</form>
<h3>El precio:</h3>
<div id="total"></div>
Vous pouvez également utiliser des attributs de données, par exemple data-cost
au lieu de conserver un mappage en mémoire des prix. Sachez que vous devrez trouver le :checked
pour accéder à l'attribut.
const form = document.forms.vacation;
const totalElement = document.querySelector('#total');
const currencyFormatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
function CalculateTotal(event) {
event.preventDefault();
const numberOfGuests = +form.elements.number.value;
const checked = form.querySelector('input[name="destino"]:checked');
const destinationCost = +checked.getAttribute('data-cost');
const total = numberOfGuests * destinationCost;
totalElement.textContent = currencyFormatter.format(total);
return false;
}
button[type="submit"] { display: block; }
.data-label { display: grid; grid-template-columns: 10em 1fr; }
#destino-info { display: inline-block; }
<form id="vacation" onSubmit="CalculateTotal(event)">
<div role="group" aria-labelledby="info">
<p id="info">Datos de clientes</p>
<label class="data-label">Nombre
<input type="name" name="nombre" >
</label>
<label class="data-label">Email
<input type="email" name="email" >
</label>
<label class="data-label">Numero de personas
<input type="number" min="1" name="number" value="number">
</label>
</div>
<div role="group" aria-labelledby="destino-info">
<p id="destino-info">Destino:</p>
<label class="destino-label">
<input type="radio" name="destino" value="destino" data-cost="100" checked >
Cuidad
</label>
<label class="destino-label">
<input type="radio" name="destino" value="mantaña" data-cost="130">
Montaña
</label>
<label class="destino-label">
<input type="radio" name="destino" value="playa" data-cost="150">
Playa
</label>
<button type="submit">Calcular tarifa</button></div>
</form>
<h3>El precio:</h3>
<div id="total"></div>