code-8
code-8

Reputation: 58790

How can only allow 1 accordion to open up at a time?

I have 4 accordions <-- click here to see


My goal

is to tweak my JS and only allow 1 accordion to open up at a time.

right ? Is my seem logic correct ?


With that in mind - I come up with

 var lists = [ "a", "b", "c", "d" ];

    lists.forEach(function(list) {

      $(".sa-report-btn-" + list).click(function () {

        $("#sa-collapse-" + list).removeClass("in");

        $(".sa-hide-" + list).removeClass("hidden");
        $(".sa-report-" + list).addClass("hidden");



      });

      $(".sa-hide-btn-" + list).click(function () {

        $("#sa-collapse-" + list).addClass("in");

        $(".sa-hide-" + list).addClass("hidden");
        $(".sa-report-" + list).removeClass("hidden");
      
      });

Result

All my accordion still opened up every time I click on them.

Fiddle

Can someone please tell me what I missed?

Upvotes: 0

Views: 79

Answers (2)

code-8
code-8

Reputation: 58790

I solved this by doing this

var lists = [ "a", "b", "c", "d" ];

      lists.forEach(function(list) {

      $(".sa-report-btn-" + list).click(function () {

        $("*[class^='sa-report-']").removeClass("hidden");
        $("*[class^='sa-hide-']").addClass("hidden");


        $(".sa-hide-" + list).removeClass("hidden");
        $(".sa-report-" + list).addClass("hidden");

        $(".panel-collapse").removeClass("in");
        $("#sa-collapse-" + list).find( $(".panel-collapse") ).addClass("in");

      });



      $(".sa-hide-btn-" + list).click(function () {

        $(".sa-hide-" + list).addClass("hidden");
        $(".sa-report-" + list).removeClass("hidden");

      });

Upvotes: 0

Altay Mazlum
Altay Mazlum

Reputation: 442

You have a variable named lists but below, you used list, maybe it's the problem?

Upvotes: 1

Related Questions