首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery:树形菜单中的链接不能导航,如何解决这个问题?

问jQuery:树形菜单中的链接不能导航,如何解决这个问题?
EN

Stack Overflow用户
提问于 2012-03-20 21:31:52
回答 3查看 990关注 0票数 2

我的树形菜单在一个无序列表中。然而,其中的链接并不起作用,我认为这是因为整个ul都在监听jquery脚本。我希望这些链接是可导航的,谁能告诉我如何做到这一点?

jquery:

代码语言:javascript
复制
   $("#treeMenu li").toggle(

function() {
    $(this).children('ul').slideDown()
    if ($(this).hasClass('contentContainer')) {
        $(this).removeClass('contentContainer').addClass('contentViewing');
    }
}, function() {
    $(this).children('ul').slideUp()
    if ($(this).hasClass('contentViewing')) {
        $(this).removeClass('contentViewing').addClass('contentContainer');
    }
});

html:

代码语言:javascript
复制
<ul id="treeMenu">
    <li class="folder1"> folder1
        <ul style="display: none">
            <li class="contentContainer"><a href="http://www.google.com">1.1</a></li>

            <li class="contentContainer"><a href="http://www.google.com">1.2</a></li>

            <li class="contentContainer"><a href="http://www.google.com">1.3</a></li>

            <li class="contentContainer"><a href="http://www.google.com">1.4</a></li>

</ul>

jsfiddle

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-20 21:46:12

来自.toggle (event)上的文档

由于.toggle()在内部使用单击处理程序来完成其工作,因此我们必须取消绑定单击以移除与.toggle()附加的行为,以便其他单击处理程序可以被困在交叉火力中。该实现还在事件上调用.preventDefault(),因此如果在元素上调用了.toggle(),则不会跟随的链接,也不会单击按钮。

看起来这就是你的遭遇。您可以使用几行jQuery代码重新添加单击功能:

代码语言:javascript
复制
$('a').click(function() {
    location.href = $(this).attr('href');
});​

(这在小提琴上是行不通的,但在你的网站上应该可以用。)

然而,我不喜欢.toggle默默地取消其他点击事件的方式,它可能会再次让你感到惊讶,所以我会用一个合适的.click替换你的.toggle,并使用.slideToggle:

代码语言:javascript
复制
$("#treeMenu li").click(function() {
    $(this).children('ul').slideToggle();
    if ($(this).hasClass('contentContainer')) {
        $(this).removeClass('contentContainer').addClass('contentViewing');
    } else if ($(this).hasClass('contentViewing')) {
        $(this).removeClass('contentViewing').addClass('contentContainer');
    };
});​

您也可以在单击处理程序中使用.toggleClass来缩短代码,但是我不能确定您希望如何根据您的小提琴来添加或删除类。

http://jsfiddle.net/Kukd2/6/

票数 1
EN

Stack Overflow用户

发布于 2012-03-20 21:50:33

http://jsfiddle.net/Kukd2/3/检查有关slideToggle和toggleClass的信息。

票数 1
EN

Stack Overflow用户

发布于 2012-05-01 06:07:19

确实行得通。替换html文件中的js。

代码语言:javascript
复制
$("#treeMenu li").click(function() {
    $(this).children('ul').slideToggle();
    if ($(this).hasClass('contentContainer')) {
        $(this).removeClass('contentContainer').addClass('contentViewing');     
    } else if ($(this).hasClass('contentViewing')) {
        $(this).removeClass('contentViewing').addClass('contentContainer');
    }
});​

JS是错误的,不允许您设置文本链接:

代码语言:javascript
复制
<script type="text/javascript">
    $(document).ready(function() {

    //Class 'contentContainer' refers to 'li' that has child with it.
    //By default the child ul of 'contentContainer' will be set to 'display:none'

        $("#treeMenu li").toggle(           

              function() { // START FIRST CLICK FUNCTION
                  $(this).children('ul').slideDown()
                  if ($(this).hasClass('contentContainer')) {   
                      $(this).removeClass('contentContainer').addClass('contentViewing');
                  }
              }, // END FIRST CLICK FUNCTION

              function() { // START SECOND CLICK FUNCTION
                  $(this).children('ul').slideUp()

                  if ($(this).hasClass('contentViewing')) {
                      $(this).removeClass('contentViewing').addClass('contentContainer');
                  }
                    } // END SECOND CLICK FUNCTIOn
                ); // END TOGGLE FUNCTION 

    }); // END DOCUMENT READY

</script>

像这个网站或JQuery树形菜单,有可下载的压缩包。http://mediamilan.com/how-to-create-simple-tree-structure-menu-using-jquery-and-css/

*更换head下方页面中的JS,因为错误。这允许您设置href或link。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9787787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档