i have a webpage full of buttons , for opening a modal with a description related to the button..
the webpage is for mobile repair service requests…
<button id="myBtn">Open Modal</button>
<div id="myModal" class="modal">
<div class="modal-content">
<div class="modal-body">
<div class="left">
<img src="#" />
</div>
<div class="middle">
<h3 class="Breakge">
Breakge
</h3>
<div class="hyperclicks">
<div class="click">Udskiftning af Skærm
<div class="sector hidden">
<div class="priceflex">
<p>Original Kvalitet </p><p class="priceitem">2299.99,-</p>
</div>
<div class="priceflex">
<p>TopKvalitet </p><p class="priceitem">1199.99,-</p>
</div>
<div class="priceflex">
<p>KobiKvalitet </p><p class="priceitem">799.99,-</p>
</div>
</div>
</div>
<div class="click">Udskiftning af Batteri
<div class="sector hidden">
<div class="priceflex">
<p>Batteri </p><p class="priceitem">549,99,-</p>
</div>
<div class="priceflex">
<p>TopKvakitet Batteri </p><p class="priceitem">649.99,-</p>
</div>
</div>
</div>
<div class="click">Udskiftning af Bagglas
<div class="sector hidden">
<div class="priceflex">
<p>Bagglas </p><p class="priceitem">999.99,-</p>
</div>
<div class="priceflex">
<p>Bagglas og Ramme </p><p class="priceitem">1699.99,-</p>
</div>
</div>
</div>
<div class="click">Udskiftning af Højtaler
<div class="sector hidden">
<div class="priceflex">
<p>Ørehøjtaler </p><p class="priceitem">599.99,-</p>
</div>
<div class="priceflex">
<p>Højtaler (Musik) </p><p class="priceitem">749.99,-</p>
</div>
</div>
</div>
<div class="click">Udskiftning af Kamera
<div class="sector hidden">
<div class="priceflex">
<p>FrontKamera </p><p class="priceitem">899.99,-</p>
</div>
<div class="priceflex">
<p>Bagkamera </p><p class="priceitem">1299.99,-</p>
</div>
<div class="priceflex">
<p>Lins </p><p class="priceitem">349.99,-</p>
</div>
</div>
</div>
<div class="click">Udskiftning af Ladestik
<div class="sector hidden">
<div class="priceflex">
<p>Ladestik </p><p class="priceitem">749.99,-</p>
</div>
<div class="priceflex">
<p>Vibrator </p><p class="priceitem">749.99,-</p>
</div>
</div>
</div>
<div class="click">Udskiftning af knapper
<div class="sector hidden">
<div class="priceflex">
<p>Tænd/Sluk funktion </p><p class="priceitem">749.99,-</p>
</div>
<div class="priceflex">
<p>Volume/Lydløs knapper </p><p class="priceitem">749.99,-</p>
</div>
</div>
</div>
<div class="click">Udskiftning af Vibrator
<div class="sector hidden">
<div class="priceflex">
<p>Vibrator </p><p class="priceitem">749.99,-</p>
</div>
</div>
</div>
<div class="click">Ander
<div class="sector hidden">
<div class="priceflex">
<p>Fejlfinding </p><p class="priceitem">349.99,-</p>
</div>
<div class="priceflex">
<p>Softwer / Gendannekse </p><p class="priceitem">349.99,-</p>
</div>
<div class="priceflex">
<p> Microchip </p><p class="priceitem">fra 799,99,-</p>
</div>
</div>
</div>
<div class="click">Tilbehør
<div class="sector hidden">
<div class="priceflex">
<p>PanserGlas </p><p class="priceitem">249.99,-</p>
</div>
<div class="priceflex">
<p>Cover </p><p class="priceitem">249.99,-</p>
</div>
</div>
</div>
</div>
</div>
<div class="right" id="right">
<h3 class="Prices">
Prices
</h3>
<div class="hyperprices">
<div class="description">
Place Description Title Here
</div>
<div class="seperateline">
</div>
</div>
<div class="btngroup">
<div class="rightbtn">
<input type="button" id="btnClose" class="btn" value="Close">
</div>
</div>
</div>
</div>
<div class="modal-footer">
</div>
</div>
</div>
there is ten sectors , and for each of them it will show another div with description and details
<div class="sector" id="sector1">
<div class="priceflex">
<p>Original Kvalitet </p><p class="priceitem">2299.99,-</p>
</div>
<div class="priceflex">
<p>TopKvalitet </p><p class="priceitem">1199.99,-</p>
</div>
<div class="priceflex">
<p>KobiKvalitet </p><p class="priceitem">799.99,-</p>
</div>
</div>
i’m using this code to show and hide each div(sector)
var modal = document.getElementById("myModal");
var btn = document.getElementById("myBtn");
var btnClose = document.getElementById("btnClose");
var divState = {};
function showhidesector(id,id2) {
if (document.getElementById) {
var divid = document.getElementById(id);
divState[id] = (divState[id]) ? false : true;
for (var div in divState){
if (divState[div] && div != id){
document.getElementById(div).style.display = 'none'; // hide
divState[div] = false;
}
}
divid.style.display = (divid.style.display == 'block' ? 'none' : 'block');
}
}
so my question is , is there anyway to achieve this without assigning id’s for each element ?
because i have to create a modal for every mobile device (about 120 devices)
2
Answers
You can simplify your code by using
querySelectorAll()
to retrieve all thep.click
elements, then looping through them to add the same event handler to each one.The related sector can targeted by using a
data
attribute to store the selector for each element. Try this:Nest
div.sector
withindiv.click
. Use event delegation. Ifdiv.click
is clicked add a class that hides all non hiddendiv.sector
withindiv.hyperclicks
. Then remove thathidden
class fromdiv.sector
from the clicked element.