假设我有一个列表,如下所示:
<ul>
<li><a href="Sitepages/Introduction.aspx">Introduction</a>
<ul>
<li><a href="Sitepages/AboutMe.aspx">About me</a></li>
<li><a href="Sitepages/AboutTheCompany.aspx">About the company</a>
<ul>
<li><a href="Sitepages/History.aspx">History</a></li>
<li><a href="Sitepages/Locations.aspx">Locations</a>
<ul>
<li><a href="Sitepages/Belgium.aspx">Belgium</a></li>
<li><a href="Sitepages/France.aspx">France</a></li>
<li><a href="Sitepages/Germany.aspx">Germany</a></li>
<li><a href="Sitepages/Norway.aspx">Norway</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
我有一个脚本可以将这个嵌套的ul转换为手风琴,以便最初只显示顶层。只要有人点击包含另一个ul的li内的链接,它就会扩展该ul,依此类推。
问题是,虽然没有提供链接时所有这一切都正常,但我想禁用每个“a”标记的默认行为,除了最低级别的标记。 因此,最低级别的li标签,其中包含链接,仍然应该是活动链接。
以下是禁用顶级链接默认行为的javascript代码:
$this.find("li").each(function(){
if ($(this).find("ul").size() != 0) {
if ($(this).find("a:first")) {
$(this).find("a:first").click(function(){ return false; });
}
});
虽然顶级链接(简介)将在点击时忽略默认行为(重定向),但它将展开并显示“关于我”和“关于公司”选项。但是当我点击“关于公司”时,它仍然会重定向。
我应该在我的代码中编辑什么来将每个“a”标记的默认行为设置为false,除了最后一个(在我的示例中:国家/地区名称)?
感谢您的帮助!
答案 0 :(得分:0)
您可以设置两个处理程序。一个用于禁用无序列表中的所有链接,另一个用于处理最后一个无序列表的点击:
// Disable all links within an ul
$('ul').on("click", "a", function(e){
e.preventDefault();
});
// second handler to bind to the last ul
$('ul:last').on("click", "a", function(e){
window.location.href = $(e.target).attr('href');
});