无法让 jquery 手风琴关闭所有面板
我正在编写手风琴脚本,有些页面有子页面(关于、方法、我们的工作),有些则没有。如果用户所在的页面没有子菜单,我也不希望显示另一个子菜单(这是当前情况)
该站点: http://thegoodgirlsnyc.com/test/new/index3_7.php
中的jquery标头:
ddaccordion.init({
headerclass: "headerbar", //Shared CSS class name of headers group
contentclass: "submenu", //Shared CSS class name of contents group
revealtype: "click", //Reveal content when user clicks or onmouseover the header? Valid value: "click", "clickgo", or "mouseover"
mouseoverdelay: 200, //if revealtype="mouseover", set delay in milliseconds before header expands onMouseover
collapseprev: true, //Collapse previous content (so only one open at any time)? true/false
defaultexpanded: [], //index of content(s) open by default [index1, index2, etc] [] denotes no content
onemustopen: false, //Specify whether at least one header should be open always (so never all headers closed)
animatedefault: false, //Should contents open by default be animated into view?
persiststate: true, //persist state of opened contents within browser session?
toggleclass: ["", "selected"], //Two CSS classes to be applied to the header when it's collapsed and expanded, respectively ["class1", "class2"]
togglehtml: ["", "", ""], //Additional HTML added to the header when it's collapsed and expanded, respectively ["position", "html1", "html2"] (see docs)
animatespeed: "normal", //speed of animation: integer in milliseconds (ie: 200), or keywords "fast", "normal", or "slow"
oninit:function(headers, expandedindices){ //custom code to run when headers have initalized
//do nothing
},
onopenclose:function(header, index, state, isuseractivated){ //custom code to run whenever a header is opened or closed
//do nothing
}
})
和 js 文件: http://thegoodgirlsnyc.com/test/new/js/ddaccordion.js
我想我可以添加一个新的标头类 - “headerclass2”并将其定义为 headerbar2 因为菜单项没有下拉菜单的类名是 .headerbar2 并更改实际 js 文件中的行 # 37 - 41 说:
collapseall:function(headerclass2){ //PUBLIC function to collapse all headers based on their shared CSS classname
var $headers=this.headergroup[headerclass2]
this.contentgroup[headerclass2].filter(':visible').each(function(){
$headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion")
})
},
当用户单击 a 时,如何才能关闭所有子菜单没有子菜单的链接?
I'm working off of an accordion script, some pages have sub pages (about, approach, our work) and some do not. If the user is on a page that there is no sub menu, I don't want another sub menu to show either (This is the current case)
The site:
http://thegoodgirlsnyc.com/test/new/index3_7.php
The jquery in the the header:
ddaccordion.init({
headerclass: "headerbar", //Shared CSS class name of headers group
contentclass: "submenu", //Shared CSS class name of contents group
revealtype: "click", //Reveal content when user clicks or onmouseover the header? Valid value: "click", "clickgo", or "mouseover"
mouseoverdelay: 200, //if revealtype="mouseover", set delay in milliseconds before header expands onMouseover
collapseprev: true, //Collapse previous content (so only one open at any time)? true/false
defaultexpanded: [], //index of content(s) open by default [index1, index2, etc] [] denotes no content
onemustopen: false, //Specify whether at least one header should be open always (so never all headers closed)
animatedefault: false, //Should contents open by default be animated into view?
persiststate: true, //persist state of opened contents within browser session?
toggleclass: ["", "selected"], //Two CSS classes to be applied to the header when it's collapsed and expanded, respectively ["class1", "class2"]
togglehtml: ["", "", ""], //Additional HTML added to the header when it's collapsed and expanded, respectively ["position", "html1", "html2"] (see docs)
animatespeed: "normal", //speed of animation: integer in milliseconds (ie: 200), or keywords "fast", "normal", or "slow"
oninit:function(headers, expandedindices){ //custom code to run when headers have initalized
//do nothing
},
onopenclose:function(header, index, state, isuseractivated){ //custom code to run whenever a header is opened or closed
//do nothing
}
})
And the js file: http://thegoodgirlsnyc.com/test/new/js/ddaccordion.js
I thought I could add a new headerclass - "headerclass2" and define it as headerbar2 because the menu items that do not have drop down's class name is .headerbar2 and change the line in the actual js file # 37 - 41 to say:
collapseall:function(headerclass2){ //PUBLIC function to collapse all headers based on their shared CSS classname
var $headers=this.headergroup[headerclass2]
this.contentgroup[headerclass2].filter(':visible').each(function(){
$headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion")
})
},
How can I get all of the sub menus to close when the user clicks on a link with no sub menus?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您遇到的问题是由于以下设置而导致状态被持久化:
persiststate: true,
。看起来发生的情况是,它不是打开单击的标题栏(即沙龙)并关闭其他标题栏,而是直接进入链接页面,因为没有子菜单。由于您要保持状态,因此打开的标题栏在新页面上保持打开状态。
因此,我的建议是使用
defaultexpanded
选项来打开您想要在特定页面上打开的特定标题栏。然后,您可以关闭persiststate
并让页面本身处理应展开的标题栏。这可能需要更多的工作,但它可以让您很好地控制访问页面时默认打开的菜单。I think the issue you're running into is that the state is being persisted because of the setting:
persiststate: true,
.It looks like what happens is, rather than opening the clicked headerbar (ie. Salons) and closing the other headerbars, it just goes straight to the linked page since there's no submenu. And since you're persisting the state, the open headerbar is staying open on the new page.
So, my suggestion is to use the
defaultexpanded
option, to open the specific headerbar you want opened on the specific page. You could then turn offpersiststate
and let the pages themselves handle which headerbar should be expanded. It may be a little more work, but it will give you fine control over which menus are open by default when visiting the pages.