0

假设我有一个列表,如下所示:

<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,除了最后一个(在我的示例中:国家名称)?

谢谢你的帮助!

4

1 回答 1

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');
});

小提琴:http: //jsfiddle.net/puleos/CjB99/

于 2013-04-25T15:38:42.990 回答