我创建一个侧栏/面板,您可以查看演示这里(JsFiddle)
问题是,在侧板上,每当我点击,它就关闭了。我的需要是侧面板关闭,只有当我们点击框,我们使用打开侧面板。
这是我的密码。
<ul id="dock">
<li id="files">
<ul class="free">
<li class="header"><a href="javascript:void(0);" class="dock"><IMG SRC="https://cdn2.iconfinder.com/data/icons/snipicons/500/pin-128.png" WIDTH="16" HEIGHT="16" BORDER="0" ALT="Dock" style = "padding-top: 12px;"></a><a href="#" class="undock"><IMG SRC="https://cdn2.iconfinder.com/data/icons/oxygen/48x48/actions/note2.png" WIDTH="16" HEIGHT="16" BORDER="0" ALT="" style = "padding-top: 12px;"></a><H5 ID="colorgreen">DISCOVER </h4></li>
<div id="accordion">
<h3>Section 1</h3>
<div class = "accordionheight">
<p>
accordion 1 content
</p>
</div>
<h3>Section 2</h3>
<div class = "accordionheight">
<p>
accordion 2 content
</p>
</div>
<h3>Section 3</h3>
<div class = "accordionheight">
<p>
accordion 3 content
</p>
</div>
</div>
</ul>
</li>
<li id="tools">
<ul class="free">
<li class="header"><a href="#" class="dock"><IMG SRC="https://cdn2.iconfinder.com/data/icons/snipicons/500/pin-128.png" WIDTH="16" HEIGHT="16" BORDER="0" ALT="Dock"></a><a href="#" class="undock"><IMG SRC="https://cdn2.iconfinder.com/data/icons/oxygen/48x48/actions/note2.png" WIDTH="16" HEIGHT="16" BORDER="0" ALT="Undock"></a><H5 ID="colorgreen">FACT FILE</H5></li>
<li><a href="#">This is one item</a></li>
<li><a href="#">This is one item</a></li>
<li><a href="#">This is one item</a></li>
<li><a href="#">This is one item</a></li>
<li><a href="#">This is one item</a></li>
</ul>
</li>
</ul>Jquery
$(document).ready(function () {
var docked = 0;
$("#dock li ul").height($(window).height());
$("#dock li").click(function () {
var test = $(this).find("ul").css('width');
if (test == "0px") {
$(".docked").addClass("free").removeClass("docked").animate({
right: "-40px",
width: '0px'
}, 200);
$(this).find("ul").addClass("docked").removeClass("free").animate({
right: "40px",
width: '180px'
}, 200);
} else {
$(this).find("ul").addClass("free").removeClass("docked").animate({
right: "-40px",
width: '0px'
}, 200);
}
});
});发布于 2013-09-11 07:12:05
问题是,因为您的面板(ul.free)位于li#files/li#tools中,当您的面板被单击时,这些元素也会收到一个单击事件(因为单击事件会一直持续到li#files/li#tools,直到调用stopPropagation() )。
您可以这样做,只需在侧栏列表项中添加一个附加元素,如下所示:
<ul id="dock">
<li id="files">
<div class="handler"></div>
<ul class="free">...</ul>
</li>
<li id="tools">
<div class="handler"></div>
<ul class="free">...</ul>
</li>
</ul>而不是将click事件绑定到此处理程序div:
$(document).ready(function(){
$("#dock .handle").click(function(){
var test = $(this).next("ul").css('width');
if (test=="0px") {
$(".docked").addClass("free")
.removeClass("docked")
.animate({right:"-40px",width:'0px'}, 200);
$(this).next("ul").addClass("docked")
.removeClass("free")
.animate({right:"40px",width:'180px'}, 200);
} else {
$(this).next("ul").addClass("free")
.removeClass("docked")
.animate({right:"-40px",width:'0px'}, 200);
}
});
});我还更新了你的jsFiddle。
发布于 2013-09-11 07:01:18
请尝尝这个。
嵌套的ul在#file中,li也会响应代码中的单击。但是,我们可以通过使用stopPropagate()来防止这种情况,这将防止处理程序与父元素相关联。
Jquery
$(document).ready(function(){
var docked = 0;
$("#dock li ul").height($(window).height());
$("#dock li").click(function(event){
var test = $(this).find("ul").css('width');
if (test=="0px"){
$(".docked").addClass("free").removeClass("docked").animate({right:"-40px",width:'0px'}, 200); $(this).find("ul").addClass("docked").removeClass("free").animate({right:"40px",width:'180px'}, 200);
}else{
$(this).find("ul").addClass("free").removeClass("docked").animate({right:"-40px",width:'0px'}, 200);
}
});
$("#dock li ul").click(function(event)
{
event.stopPropagation();
});
}); https://stackoverflow.com/questions/18733723
复制相似问题