当前位置: 首页 > 知识库问答 >
问题:

一次只能打开一个手风琴面板

公冶鸣
2023-03-14
$(document).ready(function(){
	var allPanels = $('.accordian li div');
	

	allPanels.hide();
	$('#nav-list li a').click(function() {
		var id;
		
		if(this.id == id) {
			allPanels.slideUp('slow');
			alert("hello");
		}
		else {
			allPanels.slideUp('slow');
			$(this).parent('li').find('div').toggle('slow');
			id = this.id;
		}

		return false;

	});
});
.accordian  {
	
	width: 300px;
	height: 400px;
}

.accordian li {
	width: 100%;
	list-style-type: none;
	padding: 10px;
    border: 1px solid black;
    border-bottom: 0; 

}
.accordian li:last-child {
	border-bottom: 1px solid black;
}
.accordian a {
	display: block;
	width: 100%;
	color: black;
	text-decoration: none;
	font-weight: bold;
	background-color: #a3a3a3;
}
.contentArea {
	border-top: 0; 
    font-size: 12px;
    background-color: #7BBF6A;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="nav-list" class="accordian">
		<li id="select_1">
			<a href="">Some Text</a>
			<div class="contentArea">
				"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
			</div>
		</li>
		<li id="talk_1">
			<a href="">Some Text</a>
			<div class="contentArea">
				"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
			</div>
		<li id="talk_2">
			<a href="">Some Text</a>
			<div class="contentArea">
				"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
			</div>
		</li>
		<li id="talk_3">
			<a href="">Some Text</a>
			<div class="contentArea">
				"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
			</div>
		</li>
		<li id="talk_8">
			<a href="">Some Text</a>
			<div class="contentArea">
				"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
			</div>
		</li>
		<li id="talk_9">
			<a href="">Some Text</a>
			<div class="contentArea">
				"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
			</div>
		</li>
	</ul>

有这个简单的手风琴,希望一次只打开一个手风琴面板。我的代码一直工作,直到我两次点击同一个面板试图关闭它。它不会关闭,并且总是有一个面板打开。有谁能指出我的逻辑哪里出了问题,以及如何解决?我包含了一段代码片段:

共有2个答案

华锦程
2023-03-14

好的,另一个尝试用不同/简单的方法用JQuery做手风琴。

首先,基本的超文本标记语言。使用了两个类...没有真正的css,只是使用类名作为选择器。有. selector div和. text div。您可以在http://www.infohio.org/sample.看到这一点

<ul>
  <li>
    <div id="select1" class="selector">Select 1</div>
    <div id="text1" class="text" style="display: none;">Text Goes Here</div>
  </li>
  <li>
    <div id="select2" class="selector">Select 2</div>
    <div id="text2" class="text" style="display: none;">Text Goes Here</div>
  </li>
  <li>
    <div id="select3" class="selector">Select 3</div>
    <div id="text3" class="text" style="display: none;">Text Goes Here</div>
  </li>
  <li>
    <div id="select4" class="selector">Select 4</div>
    <div id="text4" class="text" style="display: none;">Text Goes Here</div>
  </li>
</ul>

和JQuery:

jQuery(function($) {
   $(".selector").on("click",function() {
      var id=$(this).attr("id").replace("select","");
      $(".text").hide();
      $("#text"+id).show(500);
   });
});

单击选择器时,它使用选择器ID来获取关联的文本ID。然后隐藏所有. text div并显示选定的. text div。

夏侯和韵
2023-03-14

>

还有一个问题,您已经为锚点标记编写了事件(“#nav list li a”)。单击(function(){…},因此。id将尝试检索锚的id,而不是李的id,因此您需要将id更改为锚标记。

JS:

$(document).ready(function(){
    var allPanels = $('.accordian li div');

    var id;
    allPanels.hide();
    $('#nav-list li a').click(function() {          
        if(this.id == id) {
            allPanels.slideUp('slow');
            alert("hello");
        }
        else {
            allPanels.slideUp('slow');
            $(this).parent('li').find('div').toggle('slow');
            id = this.id;
        }
        return false;
    });
});

或者您可以使变量idglobal并获取父项的id,即li,而不是将id移动到锚定标记。

演示

JS:

$(document).ready(function(){
    var allPanels = $('.accordian li div');

var id;
    allPanels.hide();
    $('#nav-list li a').click(function() {  
        if($(this).closest('li').attr('id') == id) {
            $(this).parent('li').find('div').toggle('slow');            
        }
        else {
            allPanels.slideUp('slow');
            $(this).parent('li').find('div').toggle('slow');
            id = $(this).closest('li').attr('id');
        }
        return false;
    });
});
 类似资料:
  • 我有一个非常好的手风琴,它在网站上看起来很好,并且可以正常工作。但是,我正在尝试为其添加更多JavaScript功能,以使其看起来更专业。 目前,手风琴允许您一次打开多个面板,即如果我打开一个选项卡,然后打开另一个选项卡,两个选项卡将同时打开。关闭这些面板的唯一方法是重新单击标题。 我想要的是一些防止同时打开多个选项卡的JavaScript代码,所以如果我单击一个新面板,它应该首先关闭现有的打开面

  • 我有一个手风琴,它的作品真的很好,它看起来很好的网站和工程,因为它应该。然而,我正在尝试向它添加更多的JavaScript功能,使它看起来更专业。 目前,手风琴允许您一次打开多个面板,即如果我打开一个选项卡,然后打开另一个选项卡,两个选项卡将同时打开。关闭这些面板的唯一方法是重新单击标题。 我想要的是一些防止同时打开多个选项卡的JavaScript代码,所以如果我单击一个新面板,它应该首先关闭现有

  • 问题内容: 我的页面上有3个Twitter Bootstrap手风琴,每一个都这样设置: 该“的手风琴s为像上面显示的一个,所以,和。每个手风琴的面板数相同。 如何更改此设置,以便一次只能打开一个面板?目前, 每个手风琴 可以打开一个面板,这不是我想要的行为。 演示: JSFiddle 问题答案: 尝试这个:

  • 我有一个手风琴,一次只打开一个面板。我需要一些帮助,以能够关闭任何打开的面板时,用户点击打开一个关闭的面板。我想需要一些javascript来实现这一点——但我不确定如何实现……我将拥有比示例中所示更多的面板 我有以下代码:

  • 当另一个手风琴打开时,我必须关闭手风琴。我一次只能显示一个手风琴打开。目前,手风琴允许您一次打开多个面板。如果我打开一个选项卡,然后打开另一个选项卡,两个选项卡将同时打开。我只能显示一个。你能帮我吗?

  • 我尝试了以下代码,除了图标外,一切都很好。我试图在Google上找到一些解决方案,但我找不到我正在寻找的解决方案。 当我点击其中一个手风琴时,另一个手风琴应该折叠,当前点击的手风琴应该打开,同时fa图标应该根据手风琴的位置而改变。 这是我到目前为止已经尝试过的