> *** Dropdown Select-option Vehicle Type ***
<div class="col-md-8 col-sm-8">
<h5><strong> Select <c style="color: #880707;">Vehicle</c></strong></h5>
<select id="name" required>
<option value="selectVehicle">----- Select Vehicle -----</option>
<optgroup label="Pick-Up">
<option value="Light_Truck" id="option_1">Light Truck</option>
</optgroup>
<optgroup label="Van">
<option value="Van" id="option_2">Van (Manual)</option>
</optgroup>
<optgroup label="7-Seaters">
<option value="Innova_AT" id="option_3">Innova (AT)</option>
<option value="Innova_MT" id="option_4">Innova (Manual)</option>
<option value="Xpander" id="option_5">Mitsubishi Expander</option>
<option value="Suzuki_XL7" id="option_6">Suzuki XL7</option>
</optgroup>
<optgroup label="Sedan">
<option value="Vios" id="option_7">Toyota Vios</option>
<option value="Ciaz" id="option_8">Suzuki Ciaz</option>
<option value="Mirage_G4" id="option_9">Mirage G4</option>
</optgroup>
<optgroup label="Hatchback">
<option value="Mirage_GLS" id="option_10">Mirage GLS</option>
<option value="Wigo" id="option_11">Toyota Wigo</option>
</optgroup>
</select>
</div>
> *** Days-Weeks-Months Rental Duration Input ***
<div class="col-md-12 col-sm-12">
<h5><strong> Rental <c style="color: #880707;">Duration</c></strong></h5>
<fieldsets>
<input class="col-md-4" type="text" id="days" name="Days" pattern="\d*" placeholder="Days*"/>
<input class="col-md-4" type="text" id="weeks" name="Weeks" pattern="\d*" placeholder="Weeks*"/>
<input class="col-md-4" type="text" id="months" name="Months" pattern="\d*" placeholder="Months*"/>
</fieldsets>
</div>
> *** Total Cost Output ***
<div class="col-md-6 col-sm-12">
<h5><strong> Total <c style="color: #880707;">Cost</c></strong><sup> negotiable*</sup></h5>
<fieldset name="Total">
<output id="cost"> $ 0.00</output>
</fieldset>
</div>
The script works fine, it would calculate when selecting vehicles then inputting duration of rental, but vise versa it wont calculate, it stays on $ 0.00.
<script>
const rates={
option_1:[350,2200,5400],
option_2:[380,2400,6000],
option_3:[300,1800,4500],
option_4:[250,1700,4200],
option_5:[280,1680,4510],
option_6:[250,1690,4250],
option_7:[180,1200,3000],
option_8:[180,1200,3000],
option_9:[180,1200,3000],
option_10:[160,980,2500],
option_11:[160,980,2500]};
const D=[], cost=document.getElementById("cost");
document.querySelector("fieldsets").querySelectorAll("input").forEach(e=>{D.push(e);e.addEventListener("input",calc)});
document.querySelectorAll("option").forEach(e=>{e.addEventListener("click",calc)});
function calc(ev){
const prod=document.querySelector("option:checked"),
r=prod?rates[prod.id]:[0,0,0];
cost.textContent='$ '+ r.reduce((a,c,i)=>a+c*(D[i].value??0),0).toFixed(2);
}
</script>
When inputting rental duration before selecting vehicle type it stays on $ 0.00 and vise versa works fine but after click other option the output stays as is.
it seems you're missing a check for the option id before running the calc, so i added an if statement to use before running the reduce function,
if(prod.id){ ... //reduce function }
you can now try the snippet
const rates={ option_1:[350,2200,5400], option_2:[380,2400,6000], option_3:[300,1800,4500], option_4:[250,1700,4200], option_5:[280,1680,4510], option_6:[250,1690,4250], option_7:[180,1200,3000], option_8:[180,1200,3000], option_9:[180,1200,3000], option_10:[160,980,2500], option_11:[160,980,2500]}; const D=[], cost=document.getElementById("cost"); document.querySelector("fieldsets").querySelectorAll("input").forEach(e=>{D.push(e);e.addEventListener("input",calc)}); document.querySelectorAll("option").forEach(e=>{e.addEventListener("click",calc)}); function calc(ev){ const prod=document.querySelector("option:checked"), r=prod?rates[prod.id]:[0,0,0]; if(prod.id){ cost.textContent='₱ '+ r.reduce((a,c,i)=>a+c*(D[i].value??0),0).toFixed(2); } }
> *** Dropdown Select-option Vehicle Type *** <div class="col-md-8 col-sm-8"> <h5><strong> Select <c style="color: #880707;">Vehicle</c></strong></h5> <select id="name" required> <option value="selectVehicle">----- Select Vehicle -----</option> <optgroup label="Pick-Up"> <option value="Light_Truck" id="option_1">Light Truck</option> </optgroup> <optgroup label="Van"> <option value="Van" id="option_2">Van (Manual)</option> </optgroup> <optgroup label="7-Seaters"> <option value="Innova_AT" id="option_3">Innova (AT)</option> <option value="Innova_MT" id="option_4">Innova (Manual)</option> <option value="Xpander" id="option_5">Mitsubishi Expander</option> <option value="Suzuki_XL7" id="option_6">Suzuki XL7</option> </optgroup> <optgroup label="Sedan"> <option value="Vios" id="option_7">Toyota Vios</option> <option value="Ciaz" id="option_8">Suzuki Ciaz</option> <option value="Mirage_G4" id="option_9">Mirage G4</option> </optgroup> <optgroup label="Hatchback"> <option value="Mirage_GLS" id="option_10">Mirage GLS</option> <option value="Wigo" id="option_11">Toyota Wigo</option> </optgroup> </select> </div> > *** Days-Weeks-Months Rental Duration Input *** <div class="col-md-12 col-sm-12"> <h5><strong> Rental <c style="color: #880707;">Duration</c></strong></h5> <fieldsets> <input class="col-md-4" type="text" id="days" name="Days" pattern="\d*" placeholder="Days*"/> <input class="col-md-4" type="text" id="weeks" name="Weeks" pattern="\d*" placeholder="Weeks*"/> <input class="col-md-4" type="text" id="months" name="Months" pattern="\d*" placeholder="Months*"/> </fieldsets> </div> > *** Total Cost Output *** <div class="col-md-6 col-sm-12"> <h5><strong> Total <c style="color: #880707;">Cost</c></strong><sup> negotiable*</sup></h5> <fieldset name="Total"> <output id="cost"> ₱ 0.00</output> </fieldset> </div>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.