jQuery手风琴面板不会关闭

时间:2015-02-19 14:47:49

标签: javascript jquery accordion jquery-ui-accordion

我是jquery的新手,我有以下代码从div创建手风琴样式面板。代码运行正常,但是,如果我单击已经打开的面板,它会关闭面板,然后立即重新打开它。这仅适用于已经处于活动状态的面板。如果我点击另一个,它可以正常工作。

$(document).ready(function() {

    $('.accordion-section-title').addClass('active');
    // Open up the hidden content panel
    $('.accordion ' + '#accordion-1').slideDown(300).addClass('open'); 

    function close_accordion_section() {
        $('.accordion .accordion-section-title').removeClass('active');
        $('.accordion .accordion-section-content').slideUp(300).removeClass('open');

    }

    $('.accordion-section-title').click(function(e) {
        // Grab current anchor value
        var currentAttrValue = $(this).attr('href');

        if($(e.target).is('.active')) {
            close_accordion_section();

        }else {
            close_accordion_section();

            // Add active class to section title
            $(this).addClass('active');
            // Open up the hidden content panel
            $('.accordion ' + currentAttrValue).slideDown(300).addClass('open'); 
        }

        e.preventDefault();
    });


});

我附加了一个js小提琴,看起来每当我在任何标签中包装标题时都会出现问题,如果它只是空白文本,它就可以正常工作。

https://jsfiddle.net/russ1337/ynfs4zw3/

2 个答案:

答案 0 :(得分:1)

基于你的小提琴,我发现了问题。

请参阅更新的小提琴:

https://jsfiddle.net/ynfs4zw3/2/

问题是以下代码:

if($(e.target).is('.active')) {
            close_accordion_section();
        }else {
           ...
        }

您的if语句表示如果e.target处于活动状态,但如果您直接单击该文本,则目标位于.accordion-section-title div内。哪个没有.active类。

答案 1 :(得分:0)

尝试删除close_accordion_section();在else语句中:

$(document).ready(function() {

    $('.accordion-section-title').addClass('active');
    // Open up the hidden content panel
    $('.accordion ' + '#accordion-1').slideDown(300).addClass('open'); 

    function close_accordion_section() {
        $('.accordion .accordion-section-title').removeClass('active');
        $('.accordion .accordion-section-content').slideUp(300).removeClass('open');

    }

    $('.accordion-section-title').click(function(e) {
        // Grab current anchor value
        var currentAttrValue = $(this).attr('href');

        if($(e.target).is('.active')) {
            close_accordion_section();

        }else {

            // Add active class to section title
            $(this).addClass('active');
            // Open up the hidden content panel
            $('.accordion ' + currentAttrValue).slideDown(300).addClass('open'); 
        }

        e.preventDefault();
    });


});