Archief - FAQ Slider met Javascript / jquery

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

crimineels

Legacy Member
Hallo,

Ik heb volgend script gevonden waarme ik sliders kan gebruiken:
Code:
$(document).ready(function () {
 $('#faqs h3').each(function () {
	var tis = $(this),
        state = false,
        answerNext = tis.next('div').hide().css('height', 'auto').slideUp();
	answerAll = $('#faqs').children('div').hide().css('height', 'auto').slideUp();
	tis.click(function () {
		state = !state;
		answerAll.slideUp(state);
		$('#faqs').children('h3').removeClass('active');
		answerNext.slideToggle(state);
		tis.addClass('active', state);
		});
	});
});

Deze code verbergt dus alle <div> elementen onder de <h3> elementen.
de h3 elementen bevatten de vraag, de div elementen eronder het antwoord...

Nu dit werkt redelijk goed, probleem is het volgende:
Je klikt op een vraag, het antwoord wordt getoond. ==> OK.
Je klikt op een andere vraag, het vorige antwoord wordt weer verborgen, het antwoord bij de nieuwe vraag wordt getoond ==> OK.
Je klikt op een vraag die al geopend is (om ze terug te sluiten). De vraag sluit, maar opent weer meteen ==> Niet OK

Ik begrijp wel waarom dit misgaat, maar ik kan er geen oplossing voor bedenken, hiervoor heb ik te weinig ervaring met Javascript.
Ik vermoed dat ik met een extra variabele moet werken, die bijhoud welke vraag juist geopend was, geen idee hoe ik dit moet aanpakken :doh:

Iemand die hiermee kan helpen?

Thx!:bow:
Bert

Dastardly

Legacy Member
Code:
$(document).ready(function ()
{
    // Indien geen JS, gaan ze toch de antwoorden zien. 
    // Beter als verbergen met css.
    $('#faqs div').hide();

    $('#faqs h3').click(function () {

        var $me = $(this);

        // Eventueel eerder openstaande items terug dichtklappen 
        // & niet meer aanduiden als actief.
        $('#faqs div').not($me.next('div')).slideUp();
        $('#faqs h3').not($me).removeClass('active');

        // Tonen of verbergen antwoord onder vraag naargelang 
        // deze zichtbaar is of niet.
        if ($me.hasClass('active')) {
            $me.next('div').slideUp();
            $me.removeClass('active');
        } else {
            $me.addClass('active');
            $me.next('div').slideDown();
        }

    });
});

maar ik zou ook eerder gewoon iets bestaands nemen. minder werk en 't ziet er meestal beter uit :)

also, ik zou de output volgnummers meegeven in bijv. de ID. zo kan je heel gemakkelijk antwoord 12 openen als iemand op vraag 12 klinkt. zeker bij veel elementen is het altijd slim om specifieke selecties te doen op id ipv klasse (of zaken zoals $(this).next('div');)

ge kunt best ook niet door zaken loopen (uw each) als het is om bijv. een click event te binden. dat event zal toch aan alles wat aan uw selector voldoet gelinkt worden. een each gebruik je eerder als je bijvoorbeeld door alle divs wil gaan en diegene waar het woord 'volbracht' in staan wil aanduiden met andere css.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan