Not sure if that’s the correct vocabulary, but here’s what I’m trying accomplish. I’m working with a team on this big multi-page Q&A application, my task is make one particular page use the least amount of screen real estate as possible.
I’m using an accordion, each one has a question inside, and next to each question is a question mark which changes to check mark after the question is answered.
I have all that already completed which you can see here:
$(document).ready(function() { $(".accordion_head").click(function() { if ($('.accordion_body').is(':visible')) { $(".accordion_body").slideUp(300); $(".updown").text('u25BC'); } if ($(this).next(".accordion_body").is(':visible')) { $(this).next(".accordion_body").slideUp(300); $(this).children(".updown").text('u25BC'); } else { $(this).next(".accordion_body").slideDown(300); $(this).children(".updown").text('u25B2'); } }); });
.accordion_container { width: 100%; padding: 1em; } .accordion_head { background-color: #FFF; color: #555; cursor: pointer; font-family: arial; font-size: 14px; margin: 10px 0 0px 0px; padding: 10px 11px; font-weight: bold; border: 1px solid #ddd; } .accordion_body { background: #EEE; padding: 1em; } .accordion_body p { padding: 18px 5px; margin: 0px; } .check-mark, .question-mark { border-style: solid; border-width: 1px; border-radius: 50%; float: right; height: 28px; line-height: 16px; padding: 5px; position: relative; width: 28px; text-align: center; top: -4px !important; } .check-mark { border-color: #c4db30; color: #c4db30; } .question-mark { border-color: #086cff; color: #086cff; font-size: 1.3em; } .plusminus { float: left; margin-right: 10px; }
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"/> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <form action="demo_form.aspx" method="get"> <div class="accordion_container"> <div class="row"> <div class="col-xs-12 col-md-12 col-lg-6"> <div class="accordion_head"><span class="updown">▼</span> What type of sensors are required? <span class="glyphicon glyphicon-ok check-mark" aria-hidden="true"></span> </div> <div class="accordion_body" style="display: block;"> <select> <option value="sensors">None Selected</option> <option value="sensors">Photocell On</option> <option value="sensors">Off Control Only</option> <option value="sensors">Photocell On / Off Control Only</option> </select> </div> <div class="accordion_head"><span class="plusminus">▼</span> Please select if the below products are present / required. <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <div class="row"> <div class="col-xs-6"> <input type="checkbox" name="products" value="nWifi"> nWifi (nLight)<br> <input type="checkbox" name="products" value="nLightFixtures"> nLightFixtures<br> <input type="checkbox" name="products" value="xCella"> xCella (LC&D)<br> </div> <div class="col-xs-6"> <input type="checkbox" name="products" value="DaylightHarvesting"> Daylight Harvesting<br> <input type="checkbox" name="products" value="xPoint"> xPoint (LC&D)<br> <input type="checkbox" name="products" value="GraphicsSoftare"> Graphics Sofware<br> </div> </div> </div> <div class="accordion_head"><span class="updown">▼</span> What type of construction is this? <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="radio" name="contruction" value="NewConstruction" /> New Construction<br> <input type="radio" name="construction" value="Retrofit" /> Retrofit<br> </div> <div class="accordion_head"><span class="updown">▼</span> Scope of work <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="radio" name="work" value="AllAreas" /> New Construction<br> <input type="radio" name="work" value="Retrofit" /> Retrofit<br> </div> <div class="accordion_head"><span class="updown">▼</span> BMS Integration <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <div class="row"> <div class="col-xs-6"> <input type="checkbox" name="bms-integration" value="BACnetIP"> BACnet IP<br> <input type="checkbox" name="bms-integration" value="BACnetMSTP"> BACnet MSTP<br> <input type="checkbox" name="bms-integration" value="Modbus"> Modbus<br> </div> <div class="col-xs-6"> <input type="checkbox" name="bms-integration" value="LonWorks"> LonWorks<br> <input type="checkbox" name="bms-integration" value="Metasys"> Metasys<br> <input type="checkbox" name="bms-integration" value="Other"> Other<br> </div> </div> </div> <div class="accordion_head"><span class="updown">▼</span> Dimming Information <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="checkbox" name="dimming-information" value="TenV"> 0-10V<br> <input type="checkbox" name="dimming-information" value="DALI"> DALI<br> <input type="checkbox" name="dimming-information" value="TwoW"> 2W<br> <input type="checkbox" name="dimming-information" value="threeW"> 3W<br> <input type="checkbox" name="dimming-information" value="Other"> Other<br> </div> </div><!-- end .col-xs-6 --> <div class="col-xs-12 col-md-12 col-lg-6"> <div class="accordion_head"><span class="updown">▼</span> Voltages Used <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="checkbox" name="voltage" value="volt120"> 120 / 277<br> <input type="checkbox" name="voltage" value="volt208"> 208<br> <input type="checkbox" name="voltage" value="volt347"> 347<br> <input type="checkbox" name="voltage" value="volt480"> 480<br> </div> <div class="accordion_head"><span class="updown">▼</span> Interfaces <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="checkbox" name="interfaces" value="BAS"> BAS / HVAC<br> <input type="checkbox" name="interfaces" value="AV"> A/V System<br> <input type="checkbox" name="interfaces" value="Shades"> Shades<br> <input type="checkbox" name="interfaces" value="LightingControlSystems"> Other Lighting Control Systems<br> <input type="checkbox" name="interfaces" value="Other"> Other<br> </div> <div class="accordion_head"><span class="updown">▼</span> Maintain switch ganging configurations? <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="checkbox" name="switch ganging" value="Yes"> Yes<br> <input type="checkbox" name="switch ganging" value="No"> No<br> </div> <div class="accordion_head"><span class="updown">▼</span> Emergency Design <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="checkbox" name="emergency design" value="Generator"> Generator<br> <input type="checkbox" name="emergency design" value="Battery"> Battery<br> <input type="checkbox" name="emergency design" value="GTD"> GTD<br> <input type="checkbox" name="emergency design" value="Shunting Required"> Shunting Required<br> </div> <div class="accordion_head"><span class="updown">▼</span> Energy Code Compliance (Also Provide Version if Selected) <span class="question-mark" aria-hidden="true">?</span> </div> <div class="accordion_body" style="display: none;"> <input type="checkbox" name="energy code compliance" value="IECC"> IECC<br> <input type="checkbox" name="energy code compliance" value="ASHRAE"> ASHRAE 90.1<br> <input type="checkbox" name="energy code compliance" value="Title24"> Title 24<br> <input type="checkbox" name="energy code compliance" value="Other"> Other<br> </div> </div><!-- end .col-xs-6 --> </div><!-- end .accordion_container --> </form>
Here’s where I’m stuck.
Once I select an answer for a question, I want the accordion to collapse to the next question, of course, it will only apply to single answer fields.
- How do I expand the next question after I select an answer for the previous question?
- How do I change the question mark to a check mark after I select an answer?
Advertisement
Answer
You can surround each “accordion” with a div (i gave it a class accordion_main)
add the check mark classes and remove the question class.
The html will look like this:
<div class="accordion_main"> <div class="accordion_head"><span class="updown">▼</span> What type of sensors are required? <span class="glyphicon glyphicon-ok check-mark" aria-hidden="true"></span> </div> <div class="accordion_body" style="display: block;"> <select> <option value="sensors">None Selected</option> <option value="sensors">Photocell On</option> <option value="sensors">Off Control Only</option> <option value="sensors">Photocell On / Off Control Only</option> </select> </div> </div>
and js:
$(document).ready(function () { $(".accordion_head").click(function () { if ($('.accordion_body').is(':visible')) { $(".accordion_body").slideUp(300); $(".updown").text('u25BC'); } if ($(this).next(".accordion_body").is(':visible')) { $(this).next(".accordion_body").slideUp(300); $(this).children(".updown").text('u25BC'); } else { $(this).next(".accordion_body").slideDown(300); $(this).children(".updown").text('u25B2'); } }); $(".accordion_body select").change(function () { nextQuestion($(this)); }); $(".accordion_body input").change(function () { nextQuestion($(this)); }); }); function nextQuestion(currentQuestion) { var parentEle = currentQuestion.parents(".accordion_main"); if (parentEle.next()) { parentEle.find(".question-mark").addClass("glyphicon glyphicon-ok check-mark").removeClass("question-mark").text(""); if (currentQuestion.attr('type') != 'checkbox') { if (parentEle.next().find(".accordion_head").length > 0) { parentEle.next().find(".accordion_head").click(); } else { //there is no next--> try to go to the next colum parentEle.parent("div").next("div").find(".accordion_head").first().click(); } } } }