Vault Dweller
Vault Dweller

Reputation: 135

Trying to limit data-toggle in Bootstrap Accordion to .one click event

Right now I have a Bootstrap Accordion set up so when a panel body is clicked it automatically closes that panel and opens the next. I would like to restrict this event to only occur once per page load. #Carriers is the first panel-body #Storage is the ID of the next panel-body.

I tried a .one Jquery expression but it seemed to disable the accordion. I'm guessing i need to do this in JS but i was hoping there was a way to "data-toggle" only once per page load.

html accordion:

<div class="container">
                  <div class="row" align="center">
                    <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">

                      <!---carrier heading--->

                      <div class="panel panel-default">
                        <div class="panel-heading" role="tab" id="headingCarriers" class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#carriers" aria-expanded="false" aria-controls="carriers">
                          <h4 class="panel-title">
                            <a class="btn-3 btn-block btn-default" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
                              Step 1: Which Carrier? <span data-toggle="tooltip" data-placement="left" title="Select the cellular/data provider this device uses." class="glyphicon glyphicon-info-sign" style="float:right"></span>

                            </a>

                          </h4>
                        </div>



                        <!---carrier inputs--->


                        <div id="carriers" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingCarrier" data-parent="#accordion" href="#carriers">
                          <div class="panel-body" data-toggle="collapse" data-target="#storage">

                            <div id="att" class="col-sm-6 col-md-2">

                                <label>
                                    <input type="radio" name="carrier" value="att"/>
                                        <div class="thumbnail input1">
                                        <img src="images/att-icon.png" alt="..." class="img-responsive">
                                        </div>
                                </label>

                            </div>

                            <div id="verizon" class="col-sm-6 col-md-2">
                                <label>
                                    <input type="radio" name="carrier" value="verizon"/>
                                        <div class="thumbnail input1">
                                        <img src="images/verizon-icon.png" alt="..." class="img-responsive">
                                        </div>
                                </label>
                            </div>
                            <div id="sprint" class="col-sm-6 col-md-2">
                                <label>
                                    <input type="radio" name="carrier" value="sprint"/>
                                        <div class="thumbnail input1">
                                        <img src="images/sprint-icon.png" alt="..." class="img-responsive">
                                        </div>
                                </label>
                            </div>
                            <div id="t-mobile" class="col-sm-6 col-md-2">
                                <label>
                                    <input type="radio" name="carrier" value="t-mobile"/>
                                        <div class="thumbnail input1">
                                        <img src="images/t-mobile-logo.png" alt="..." class="img-responsive">
                                        </div>
                                </label>
                            </div>

                            <div id="unlocked" class="col-sm-6 col-md-2">
                                <label>
                                    <input type="radio" name="carrier" value="unlocked"/>
                                        <div class="thumbnail input1">
                                        <img src="images/factoryunlocked.png" alt="..." class="img-responsive">
                                        </div>
                                </label>
                            </div>

                            <div id="other" class="col-sm-6 col-md-2">

                                    <label>
                                        <input type="radio" name="carrier" value="other"/>
                                            <div class="thumbnail input1">
                                              <img src="images/othercarriers.png" alt="...">
                                            </div>
                                    </label>        
                            </div>

                          </div>
                        </div>
                      </div>


                      <!---storage heading--->

                      <div class="panel panel-default">
                        <div class="panel-heading" role="tab" id="headingStorage" class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#storage" aria-expanded="false" aria-controls="storage">
                          <h4 class="panel-title">
                            <a class="btn-3 btn-block btn-default" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
                              Step 2: How Much Storage? <span data-toggle="tooltip" data-placement="left" title="How many GB does this device have in storage?" class="glyphicon glyphicon-info-sign" style="float:right"></span>

                            </a>
                          </h4>
                        </div>



                        <!---storage inputs--->


                        <div id="storage" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingStorage" data-parent="#accordion" href="#storage">
                          <div class="panel-body" data-toggle="collapse" data-target="#condition">

                                <div id="placeholder2" class="col-sm-12 col-md-3">

                                </div>
                                <div id="storage16" class="col-sm-12 col-md-2">

                                    <label>
                                        <input type="radio" name="storage" value="16"/>
                                            <div class="thumbnail input1">
                                              <img src="images/16gb.png" alt="...">
                                            </div>
                                    </label>        
                                </div>
                                <div id="storage64" class="col-sm-12 col-md-2">

                                    <label>
                                        <input type="radio" name="storage" value="64"/>
                                            <div class="thumbnail input1">
                                              <img src="images/64gb.png" alt="...">
                                            </div>
                                    </label>        
                                </div>
                                <div id="storage128" class="col-sm-12 col-md-2">

                                    <label>
                                        <input type="radio" name="storage" value="128"/>
                                            <div class="thumbnail input1">
                                              <img src="images/128gb.png" alt="...">
                                            </div>
                                    </label>        
                                </div>


                          </div>
                        </div>
                      </div>
                      <div id="conditionPanel" class="panel panel-default">
                        <div class="panel-heading" role="tab" id="headingCondition" class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#condition" aria-expanded="false" aria-controls="condition">
                          <h4 class="panel-title">

                              <a class="btn-3 btn-block btn-default" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
                              Step 3: What Is The Condition? <span data-toggle="tooltip" data-placement="left" title="Ensure that you accurately choose the condition that bests describes this device." class="glyphicon glyphicon-info-sign" style="float:right"></span>

                            </a>

                          </h4>
                        </div>




                        <!---condition inputs--->



                        <div id="condition" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCondition" data-parent="#accordion">
                            <div class="panel-body" data-toggle="collapse" data-target="#condition">
                                <div id="condition">

                                    <div id="condition1" class="col-sm-12 col-md-3">
                                        <label>
                                            <input type="radio" name="condition" value="1"/>
                                                <div class="thumbnail input1">
                                                  <div class="btn btn-lg btn-success btn-block">Like New</h1></div>
                                                  <div class="caption">
                                                    <p>"Like New" phones look brand new, and have no signs of use. Very few phones are in this condition.</p>
                                                  </div>
                                                </div>
                                        </label>
                                    </div>

                                    <hr class="hidden-md hidden-lg">

                                    <div id="condition2" class="col-sm-12 col-md-3">
                                        <label>
                                            <input type="radio" name="condition" value="2"/>
                                                <div class="thumbnail input1">
                                                  <div class="btn btn-lg btn-primary btn-block">Good</h1></div>
                                                  <div class="caption">
                                                    <p>"Good" phones appear to be lightly used and function %100. Most phones fall in this category.</p>
                                                  </div>
                                                </div>
                                        </label>
                                    </div>

                                    <hr class="hidden-md hidden-lg">

                                    <div id="condition3" class="col-sm-12 col-md-3">
                                        <label>
                                            <input type="radio" name="condition" value="3"/>
                                                <div class="thumbnail input1">
                                                  <div class="btn btn-lg btn-warning btn-block">Cracked</h1></div>
                                                  <div class="caption">
                                                    <p>"Cracked" phones have damaged screens, but otherwise function and look like a "Good" phone.</p>
                                                  </div>
                                                </div>
                                        </label>
                                    </div>

                                    <hr class="hidden-md hidden-lg">

                                    <div id="condition4" class="col-sm-12 col-md-3">
                                        <label>
                                            <input type="radio" name="condition" value="4"/>
                                                <div class="thumbnail input1">
                                                  <div class="btn btn-lg btn-danger btn-block">Poor</h1></div>
                                                  <div class="caption">
                                                    <p>"Poor" phones may have water damage, missing buttons, heavy wear, or do not turn on.</p>
                                                  </div>
                                                </div>
                                        </label>
                                    </div>

                                </div>
                            </div>
                          </div>
                        </div>
                     </div>
                  </div>
                </div>

        </form> 

JS:

$(function()  {

    //scroll back to top in index.html

    $("#backtotop").on('click', function()  {

        $('html, body').animate({
        scrollTop: $("header").offset().top
        }, 350);

    });


    // Carrier Input

    $("#carriers").one('click', function()  {

        $('#question').hide ();
        $('html, body').animate({
        scrollTop: $("#carriers").offset().top
        }, 500);

    });
    //att
    $("#att").on('click', function()  {

        $('#att2').show(300).siblings().hide ();



    }); 
    //verizon
    $("#verizon").on('click', function()  {

        $('#verizon2').show(300).siblings().hide ();



    });
    //sprint
    $("#sprint").on('click', function()  {


        $('#sprint2').show(300).siblings().hide ();



    });
    //t-mobile
    $("#t-mobile").on('click', function()  {


        $('#t-mobile2').show(300).siblings().hide ();



    });
    //unlocked
    $("#unlocked").on('click', function()  {


        $('#unlocked2').show(300).siblings().hide ();



    });
    //other
    $("#other").on('click', function()  {


        $('#other2').show(300).siblings().hide ();



    });
    //data
    $("#data").on('click', function()  {


        $('#data2').show(300).siblings().hide ();



    });
    //wifi
    $("#wifi").on('click', function()  {


        $('#wifi2').show(300).siblings().hide ();



    });




    // Storage Input


    $("#storage").one('click', function()  {

        $('#question').hide ();
        $('html, body').animate({
        scrollTop: $("#storage").offset().top
        }, 500);


    });
    //8gb
    $("#storage8").on('click', function()  {


        $('#2storage8').show(300).siblings().hide ();



    });
    //16gb
    $("#storage16").on('click', function()  {


        $('#2storage16').show(300).siblings().hide ();



    });
    //32gb
    $("#storage32").on('click', function()  {


        $('#2storage32').show(300).siblings().hide ();



    });
    //64gb
    $("#storage64").on('click', function()  {


        $('#2storage64').show(300).siblings().hide ();


    });
    //128gb
    $("#storage128").on('click', function()  {


        $('#2storage128').show(300).siblings().hide ();


    });
    //256gb
    $("#storage256").on('click', function()  {


        $('#2storage256').show(300).siblings().hide ();


    });
    //512gb
    $("#storage512").on('click', function()  {


        $('#2storage512').show(300).siblings().hide ();


    });




    //Event handler to prevent up and down key presses from changing 'condition input'

    $('input[type="radio"]').keydown(function(e)
    {
        var arrowKeys = [37, 38, 39, 40];
        if (arrowKeys.indexOf(e.which) !== -1)
        {
        $(this).blur();
        return false;
    }
    });

    //Condition input

    $("#condition").one('click', function()  {

        $('#question').hide ();
        $('#resultsButton, .verifyResults').slideDown(425);
        $('html, body').animate({
        scrollTop: $("#questions").offset().top - 50
        }, 250);


    });

    //Like New
    $("#condition1").on('click', function()  {


        $('#condition1-2').show(300).siblings().hide ();


    });
    //Good
    $("#condition2").on('click', function()  {


        $('#condition2-2').show(300).siblings().hide ();


    });
    //Cracked
    $("#condition3").on('click', function()  {


        $('#condition3-2').show(300).siblings().hide ();


    });
    //Poor
    $("#condition4").on('click', function()  {


        $('#condition4-2').show(300).siblings().hide();


    });



    //Accordion Heading tabs

    //condition header
    $("#headingCondition").on('click', function()  {



        $('html, body').animate({
        scrollTop: $("#headingCondition").offset().top
        }, 200);


    });
    //storage header
    $("#headingStorage").on('click', function()  {



        $('html, body').animate({
        scrollTop: $("#headingStorage").offset().top
        }, 200);


    });
    //carrier header
    $("#headingCarrier").on('click', function()  {


        $('html, body').animate({
        scrollTop: $("#headingCarrier").offset().top
        }, 200);

    });


    //Hidden Thumbnails


    $(".carrierValue").on('click', function()  {



        $('#carriers').collapse('show');
        $('html, body').animate({
        scrollTop: $("#headingCarriers").offset().top
        }, 500);


    });

    $("#storageValue").on('click', function()  {



        $('#storage').collapse('show');
        $('html, body').animate({
        scrollTop: $("#headingStorage").offset().top
        }, 500);


    });

    $("#conditionValue").on('click', function()  {



        $('#condition').collapse('show');
        $('html, body').animate({
        scrollTop: $("#headingCondition").offset().top
        }, 500);


    });




    // Verification message 


    $("#verifySelection").on('click', function()  {


        $('html, body').animate({
        scrollTop: $("#logo").offset().top
        }, 500);


    });

    $(".btn-group").on('click', function()  {


        $('html, body').animate({
        scrollTop: $(this).offset().top - 300
        }, 350);


    });






});


// Form validation, returns alert "Please enter (missing value)" on submit if one of the radio buttons did not get clicked.


function validateForm() {
        var x = document.forms["selection"]["carrier"].value;
        var y = document.forms["selection"]["storage"].value;
        var z = document.forms["selection"]["condition"].value;

        if (x == null || x == "") {
        alert("Please enter a 'Carrier'");
        return false;
        }

        if (y == null || y == "") {
        alert("Please enter a 'Storage' value");
        return false;
        }
        if (z == null || z == "") {
        alert("Please enter a 'Condition' value");
        return false;
        }
    }

// Form Validation for models with no storage option

    function validateForm2() {
        var x = document.forms["selection"]["carrier"].value;
        var z = document.forms["selection"]["condition"].value;

        if (x == null || x == "") {
        alert("Please enter a 'Carrier'");
        return false;
        }
        if (z == null || z == "") {
        alert("Please enter a 'Condition' value");
        return false;
        }
    }

    //initialize tooltips
    $(function () {
        $('[data-toggle="tooltip"]').tooltip()
    })

Upvotes: 0

Views: 1307

Answers (1)

Dave Lunny
Dave Lunny

Reputation: 770

This is as good of an answer I have for you given the information you've provided:

This sounds like a job for a Boolean flag.

The way this works is that you have a variable, let's say hasAccordianBeenClosed, and you start by setting it to false.

Add a check if this is true before your closed code runs. After it runs set that variable to true, and it will not run again.

Upvotes: 2

Related Questions