Slide Toggle JQuery无法正常工作

时间:2014-01-27 23:51:37

标签: javascript php jquery slidetoggle

所以我在我试过的第一页上就可以正常工作了:

http://www.uksf.net/platoon.php

但我无法在首页上发挥作用:

http://www.uksf.net/index.php(侧边的导航栏应该有一个小菜单下拉(你可以在检查员身上看到))。

这是代码:

        $this->con = $this->connect();

    $query = $this->con->prepare('SELECT * FROM SideNav WHERE type = "top" ORDER BY displayorder ASC');
    $query->setFetchMode(PDO::FETCH_ASSOC);
    $query->execute();

    while ($row = $query->fetch()){
        echo'<div class="sn'.$row["id"].'">';
        echo'<div class="sidelink">'.
            $row["name"].'
            </div>';

        $query2 = $this->con->prepare('SELECT * FROM SideNav WHERE type = "bottom" AND parent = :id ORDER BY displayorder ASC');
        $query2->bindParam(':id', $row["id"]);
        $query2->setFetchMode(PDO::FETCH_ASSOC);
        $query2->execute();
        $rot = $query2->fetch();
        if(!empty($rot))
        {
            echo'<div class="sn'.$row["id"].'group">';
            echo'<div class="sidelinksub">';

            $query2 = $this->con->prepare('SELECT * FROM SideNav WHERE type = "bottom" AND parent = :id ORDER BY displayorder ASC');
            $query2->bindParam(':id', $row["id"]);
            $query2->setFetchMode(PDO::FETCH_ASSOC);
            $query2->execute();
            while ($row2 = $query2->fetch()){
                echo'<div>'.
                $row2["name"]
                .'</div>';
            }
            echo'</div></div>';
        }
        echo'<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
            $(document).ready(function(){
                $(".sn'.$row["id"].'").click(function(){
                $(".sn'.$row["id"].'group").slideToggle("slow");
                });
            });</script></div>';
    }

幻灯片切换不起作用我花了几天时间试图解决这个问题,所以我没有突发奇想,帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

您的切换似乎没问题,但您有一些JS错误。尝试使用开发人员工具(在chrome上按F12)。

我建议使用更通用的功能进行toggeling。的 See example

$(function(){
    $("div.hide").hide();
    $("div.menu").click(function(event){
        $("#" + event.target.id + "group").slideToggle("slow");
    });
});

此函数有递归问题:

function slideNext($slidePos, $slides, $captions) {
    if($slidePos != 2) {
        $slidePos = $slidePos + 1;
    }
    else {
        $slidePos = 0;
    };
    $nextLeft = $slidePos * -690;
    $slides.delay(5000).animate({left: $nextLeft}, 1000);
    $captions.delay(5000).animate({left: $nextLeft}, 1000);
    slideNext($slidePos, $slides, $captions);
};

最后一行是被叫太多次了。你得到Uncaught RangeError: Maximum call stack size exceeded错误。

我可以看到你用$slidePos = 0调用这个函数然后如果它不等于2你再次将值设置为0。在任何情况下,无论你的州是什么,你都会继续调用slideNext函数。这意味着您没有停止条件。