Jquery手风琴在页面加载时崩溃了

时间:2016-03-28 08:53:40

标签: javascript jquery

我正在尝试使用jquery创建一个可扩展的手风琴。我无法弄清楚我应该如何防止它在页面加载时扩展。我不知道jquery,任何帮助将不胜感激。

            <ul>
            <li class="expandable root">

                <label for=" Oraganization" class="active"> Oraganization</label> 
                <span class="pull-right oraganization active expand-icon glyphicon glyphicon-minus"></span> 

                <ul id="accordion">
                    <li class="expandable">
                        <span class="expand-icon active glyphicon glyphicon-minus"></span> 
                        <input type="checkbox" id="Manager-1"> 
                        <label for="Manager-1"> Manager-1</label> 

                        <ul id="accordion">
                            <li>
                                <input type="checkbox" id="Sub-Manager-1"> 
                                <label for="Sub-Manager-1"> Sub-Manager-1</label> 
                            </li>
                            <li class="expandable">
                                <span class="expand-icon active glyphicon glyphicon-minus"></span> 
                                <input type="checkbox" id="Sub-Manager-2"> 
                                <label for="Sub-Manager-2"> Sub-Manager-2</label> 

                                <ul class="accordion">
                                    <li>
                                        <input type="checkbox" id="Associate-1"> 
                                        <label for="Associate-1"> Associate-1</label> 
                                    </li>
                                    <li>
                                        <input type="checkbox" id="Associate-2"> 
                                        <label for="Associate-2"> Associate-2</label> 
                                    </li>



                            <li class="expandable">
                                <span class="expand-icon active glyphicon glyphicon-minus"></span> 
                                <input type="checkbox" id="Associate-5"> 
                                <label for="Associate-5"> Associate-5</label> 
                                <ul class="accordion">
                                    <li>
                                        <input type="checkbox" id="Sub-associate-1"> 
                                        <label for="Sub-associate-1"> Sub-associate-1</label> 
                                    </li>
                                    <li>
                                        <input type="checkbox" id="Sub-associate-2"> 
                                        <label for="Sub-associate-2"> Sub-associate-2</label> 
                                    </li>
                                    <li>
                                        <input type="checkbox" id="Sub-associate-3"> 
                                        <label for="Sub-associate-3"> Sub-associate-3</label> 
                                    </li>   
                                    <li>
                                        <input type="checkbox" id="Sub-associate-4"> 
                                        <label for="Sub-associate-4"> Sub-associate-4</label> 
                                    </li>
                                </ul>
                                </li>
                                </ul>
                                </li>
                            </li>
                        </ul>
                    </li>


                    <li class="expandable">
                                <span class="expand-icon active glyphicon glyphicon-plus"></span> 
                                <input type="checkbox" id="Manager-2"> 
                                <label for="Manager-2"> Manager-2</label> 
                    </li>
                    <li class="expandable">

                                <span class="expand-icon active glyphicon glyphicon-plus"></span> 
                                <input type="checkbox" id="Manager-3"> 
                                <label for="Manager-3"> Manager-3</label> 
                    </li>                       

                </ul>
            </li>
        </ul>

JS文件:

$(document).ready(function(){

$('.expand-icon').click(function(){

    var elem = $(this);
    if(elem.hasClass('active')) {
        elem.removeClass('active');

        var subElem = elem.siblings('ul');
        var nestedElem =elem.siblings('ul').find('ul');

        if(nestedElem.length == 0) {
            subElem.slideUp('fast');
        }
        else {
            nestedElem.slideUp('fast',function(){
                subElem.slideUp('fast');
            });
        }
        $.when(elem.removeClass('glyphicon-minus')).then(function(){
            elem.addClass('glyphicon-plus');
        });
    }
    else {
        elem.addClass('active');
        elem.siblings('ul').slideDown('fast',function(){
            elem.siblings('ul').find('ul').slideDown('fast');   
        });
        $.when(elem.removeClass('glyphicon-plus')).then(function(){
            elem.addClass('glyphicon-minus');
        });
    }

});


$('.expandable :checkbox').on('change', function() {

    $(this).parent().find('li input[type=checkbox]').prop('checked', $(this).is(':checked'));
    var sibs = false;
    $(this).closest('ul').children('li').each(function () {
        if($('input[type=checkbox]', this).is(':checked')) sibs=true;
    });
    $(this).parents('ul').siblings(':checkbox').prop('checked', sibs);

});

});

您可以在此链接找到bootply:http://www.bootply.com/1W8bSTnmx6

2 个答案:

答案 0 :(得分:1)

Fiddle Here

这是因为你在装载它时会打开第一个手风琴。要解决此问题,请在加载$($('#accordion .expand-icon')[0]).click();时对其执行单击操作。请查看此处的工作示例http://www.bootply.com/vGoKbvfKtl

答案 1 :(得分:0)

您只是在页面加载时显示所有手风琴,因为没有隐藏任何位置。

根据您的代码由于只有第一个Accordion包含数据,否则会显示,否则每个可展开的div都会显示。

对此的解决方案是向类手风琴添加一个隐藏类,以便它不会在开始时显示,在单击功能时,您可以删除该类并显示它。

$(document).ready(function(){
	
	$('.expand-icon').click(function(){
		$('ul').removeClass('hide')
		var elem = $(this);
		if(elem.hasClass('active')) {
			elem.removeClass('active');
			
			var subElem = elem.siblings('ul');
			var nestedElem =elem.siblings('ul').find('ul');
			
			if(nestedElem.length == 0) {
				subElem.slideUp('fast');
			}
			else {
				nestedElem.slideUp('fast',function(){
					subElem.slideUp('fast');
				});
			}
			$.when(elem.removeClass('glyphicon-minus')).then(function(){
				elem.addClass('glyphicon-plus');
			});
		}
		else {
			elem.addClass('active');
			elem.siblings('ul').slideDown('fast',function(){
				elem.siblings('ul').find('ul').slideDown('fast');	
			});
			$.when(elem.removeClass('glyphicon-plus')).then(function(){
				elem.addClass('glyphicon-minus');
			});
		}
		
	});
	
	
	$('.expandable :checkbox').on('change', function() {
		
		$(this).parent().find('li input[type=checkbox]').prop('checked', $(this).is(':checked'));
		var sibs = false;
		$(this).closest('ul').children('li').each(function () {
			if($('input[type=checkbox]', this).is(':checked')) sibs=true;
		});
		$(this).parents('ul').siblings(':checkbox').prop('checked', sibs);
		
	});
  
	$('.organization').click(function(){
      $('.accordion')[0].click()
    }) 
});
<ul>
	<li class="expandable ">
		 
		<label for=" Oraganization" class="active"> Oraganization</label> 
		<span class=" organization active expand-icon glyphicon glyphicon-minus"></span> 
		
		<ul id="">
			<li class="expandable">
				<span class="expand-icon glyphicon glyphicon-plus"></span> 
				<input type="checkbox" id="Manager-1"> 
				<label for="Manager-1"> Manager-1</label> 
				
				<ul class="accordion hide">
					<li>
						<input type="checkbox" id="Sub-Manager-1"> 
						<label for="Sub-Manager-1"> Sub-Manager-1</label> 
					</li>
					<li class="expandable">
						<span class="expand-icon active glyphicon glyphicon-minus"></span> 
						<input type="checkbox" id="Sub-Manager-2"> 
						<label for="Sub-Manager-2"> Sub-Manager-2</label> 
						
						<ul class="accordion">
							<li>
								<input type="checkbox" id="Associate-1"> 
								<label for="Associate-1"> Associate-1</label> 
							</li>
							<li>
								<input type="checkbox" id="Associate-2"> 
								<label for="Associate-2"> Associate-2</label> 
							</li>
							
						
					
					<li class="expandable">
						<span class="expand-icon active glyphicon glyphicon-minus"></span> 
						<input type="checkbox" id="Associate-5"> 
						<label for="Associate-5"> Associate-5</label> 
						<ul class="accordion">
							<li>
								<input type="checkbox" id="Sub-associate-1"> 
								<label for="Sub-associate-1"> Sub-associate-1</label> 
							</li>
							<li>
								<input type="checkbox" id="Sub-associate-2"> 
								<label for="Sub-associate-2"> Sub-associate-2</label> 
							</li>
							<li>
								<input type="checkbox" id="Sub-associate-3"> 
								<label for="Sub-associate-3"> Sub-associate-3</label> 
							</li>	
							<li>
								<input type="checkbox" id="Sub-associate-4"> 
								<label for="Sub-associate-4"> Sub-associate-4</label> 
							</li>
						</ul>
						</li>
						</ul>
						</li>
					
				</ul>
			</li>

			
			<li class="expandable">
						<span class="expand-icon active glyphicon glyphicon-plus"></span> 
						<input type="checkbox" id="Manager-2"> 
						<label for="Manager-2"> Manager-2</label> 
			</li>
			<li class="expandable">
			
						<span class="expand-icon active glyphicon glyphicon-plus"></span> 
						<input type="checkbox" id="Manager-3"> 
						<label for="Manager-3"> Manager-3</label> 
			</li>						

		</ul>
	</li>
</ul>

这是bootply,  的 Bootply link for it