Множество зареждащи акордеони със свиване на други при щракване върху един акордеон

Опитах следния код и всичко е наред с изключение на иконите FontAwesome. Опитах се да намеря някакво решение в Google, но не можах да намеря решението, което търся.

Когато щракна върху един от акордеоните, другият акордеон трябва да се свие и текущият щракнат акордеон трябва да бъде отворен, като в същото време иконата fa трябва да се промени в зависимост от позицията на акордеона.

Ето какво опитах досега JSFiddle

$(document).ready(function () {

	    $(".accordion-body").on("shown", function (evt) {
	        setIcon(evt.target, true);
	    });

	    $(".accordion-body").on("hidden", function (evt) {
	        setIcon(evt.target, false);
	    });

	    $(".accordion-body").collapse("hide");
	    $("#collapse-faq-1").collapse("show");


	});

	$('.accordion-toggle').click(function(event) {
	var id = '#'+ event.currentTarget.firstElementChild.id;
    if('class == fa-chevron-down'){
	    $(id).removeClass('fa-chevron-down');
	    $(id).addClass('fa-close');
	}else{
		$(id).removeClass('fa-close');
	    $(id).addClass('fa-chevron-down');
	}
});

$(function () {

    var active = true;

    $('#collapse-init').click(function () {
        if (active) {
            active = false;
            $('.panel-collapse').collapse('show');
            $('.panel-title').attr('data-toggle', '');
            $(this).text('Enable accordion behavior');
        } else {
            active = true;
            $('.panel-collapse').collapse('hide');
            $('.panel-title').attr('data-toggle', 'collapse');
            $(this).text('Disable accordion behavior');
        }
    });
    
    $('#accordion').on('show.bs.collapse', function () {
        if (active) $('#accordion .in').collapse('hide');
    });

});
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<div class="accordion" id="accordion">
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-1">
                <i id="indicator-1" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-1" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-2">
                <i id="indicator-2" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-2" class="accordion-body collapse in">
            <div class="accordion-inner">
            	<p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-3">
                <i id="indicator-3" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-3" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-4">
                <i id="indicator-4" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-4" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-5">
                <i id="indicator-5" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-5" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-6">
                <i id="indicator-6" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-6" class="accordion-body collapse in">
            <div class="accordion-inner">
            	<p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading WhiteBg" id="heads">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-7">
                <i id="indicator-7" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-7" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading WhiteBg">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-8">
                <i id="indicator-8" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-8" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
</div>


person Chandra Shekar Captain    schedule 27.02.2015    source източник


Отговори (1)


Първо, вие не сте свързали файла bootstrap.min.js във вашия код. Ако искате да използвате bootstrap, тогава трябва да включите неговия bootstrap.min.css файл заедно с неговия bootstrap.min.js файл, за да направи всичко вместо вас.

Имате нужда от следния код, за да работи според вашите изисквания. Използвайки not(this), той ще ви даде всички елементи, с изключение на текущо кликнатия елемент. Така че можете да нулирате Fa иконите на всички други елементи и да приложите конкретна икона върху вашия този елемент.

$('.accordion-toggle').click(function (event) {

    var $this = $(this);

    // It will reset all the other icons except the clicked item icon

    $('.accordion-toggle').not(this).children('i').removeClass('fa-close').addClass('fa-chevron-down');

    if ($this.children('i').hasClass('fa-chevron-down')) {

        $this.children('i').removeClass('fa-chevron-down').addClass('fa-close');

    } else {

        $this.children('i').removeClass('fa-close').addClass('fa-chevron-down');

    }
});

Ето работещ JSFiddle.


По-долу е вграденият фрагмент за вашия въпрос.

$(function () {


        $(document).ready(function () {

            $(".accordion-body").on("shown", function (evt) {
                setIcon(evt.target, true);
            });

            $(".accordion-body").on("hidden", function (evt) {
                setIcon(evt.target, false);
            });

            $(".accordion-body").collapse("hide");
            $("#collapse-faq-1").collapse("show");


        });

        $('.accordion-toggle').click(function (event) {

            var $this = $(this);

            // It will reset all the icons except the clicked (this) item.
            $('.accordion-toggle').not(this).children('i').removeClass('fa-close').addClass('fa-chevron-down');

            if ($this.children('i').hasClass('fa-chevron-down')) {
                
                $this.children('i').removeClass('fa-chevron-down').addClass('fa-close');
                
            } else {
                
                $this.children('i').removeClass('fa-close').addClass('fa-chevron-down');
                
            }
        });

        $(function () {

            var active = true;

            $('#collapse-init').click(function () {
                if (active) {
                    active = false;
                    $('.panel-collapse').collapse('show');
                    $('.panel-title').attr('data-toggle', '');
                    $(this).text('Enable accordion behavior');
                } else {
                    active = true;
                    $('.panel-collapse').collapse('hide');
                    $('.panel-title').attr('data-toggle', 'collapse');
                    $(this).text('Disable accordion behavior');
                }
            });

            $('#accordion').on('show.bs.collapse', function () {
                if (active) $('#accordion .in').collapse('hide');
            });

        });

    });
 
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<div class="accordion" id="accordion">
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-1">
                <i id="indicator-1" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-1" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-2">
                <i id="indicator-2" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-2" class="accordion-body collapse in">
            <div class="accordion-inner">
            	<p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-3">
                <i id="indicator-3" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-3" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-4">
                <i id="indicator-4" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-4" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-5">
                <i id="indicator-5" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-5" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-6">
                <i id="indicator-6" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-6" class="accordion-body collapse in">
            <div class="accordion-inner">
            	<p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading WhiteBg" id="heads">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-7">
                <i id="indicator-7" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-7" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
    <div class="accordion-group items">
        <div class="accordion-heading WhiteBg">
            <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="/bg#collapse-faq-8">
                <i id="indicator-8" class="fa fa-chevron-down pull-right"></i> 
                Question
            </a>
        </div>
        <div id="collapse-faq-8" class="accordion-body collapse in">
            <div class="accordion-inner">
                <p>
            		Inner content
            	</p>
            </div>
        </div>
    </div>
</div>

person Suhaib Janjua    schedule 27.02.2015
comment
Актуализирах моя ДЕМО JSFiddle в отговора. Моля, посетете го и съм сигурен, че това е решението, което търсите. - person Suhaib Janjua; 27.02.2015
comment
Искате да кажете, че искате да промените фона на текста Question на сив, когато е отворен, и да го промените обратно на бял, когато акордеонът е затворен? - person Suhaib Janjua; 27.02.2015
comment
Можете да използвате $this.css({ "background": "grey" }); в блок if и $this.css({ "background": "white" }); в блок else. Също така трябва да добавите $('.accordion-toggle').not(this).css({ "background": "white" });, за да премахнете фона от всички други въпроси, с изключение на $(this) Ето още актуализирания JSFiddle - person Suhaib Janjua; 27.02.2015