Jquery在click事件中多个函数

时间:2010-09-08 09:37:32

标签: jquery

当点击我希望这个特定的.parents ul打开而所有其他崩溃。下面的代码对我不起作用。

我想我不明白我在以下代码中如何使用这个并滥用 e

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="/der/jquery.cookie.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    var selected;
    $(".parents").click(function(){
        selected = this.id;

        // Open list
        $("#" + selected + " ul").css("display", "block");

        // Remember opened list
        $.cookie('tree', '#' + this.id);

        // Cycle through all lists
        $(".parents").each(function(e){
            // Collapse all children that does not
            // belongs to the opened list
            if(e.id != selected) {
                $("#" + e.id + " ul").css("display", "none");
            }
        });
    });
});
</script>
<style type="text/css">
.child_list {
    display: none;
}
</style>
</head>
<body>
<ul id="tree">
    <li class="parents" id="parent_1"><a href="#">Parent 1</a>
        <ul class="child_list">
            <li class="child"><a href="#">Child 1</a>
            <li class="child"><a href="#">Child 2</a>
            <li class="child"><a href="#">Child 3</a>
        </ul>
    </li>
    <li class="parents" id="parent_2"><a href="#">Parent 2</a>
        <ul class="child_list">
            <li class="child"><a href="#">Child 1</a>
            <li class="child"><a href="#">Child 2</a>
            <li class="child"><a href="#">Child 3</a>
        </ul>
    </li>
</ul>
</body>
</html>

2 个答案:

答案 0 :(得分:3)

不是重新选择内容,而是找到相对于this相对于您点击的项目的内容,如下所示:

$(function(){
  $(".parents").click(function(){
    // Open list
    $(this).find("ul").show();

    // Remember opened list
    $.cookie('tree', '#' + this.id);

    // Cycle through all lists
    $(this).siblings().find("ul").hide();
  });
});​

You can give it a try here(除了cookie之外的所有内容)。你也可以使用.slideUp().slideDown()而不是.hide().show()check that option here给它一些动画。

上述方法使用tree traversal,因此您从点击的<li>开始,然后四处寻找您想要的内容,例如其他.siblings()关闭他们的孩子等等。

答案 1 :(得分:0)

更改

$(".parents").each(function(e){
            // Collapse all children that does not
            // belongs to the opened list
            if(e.id != selected) {
                $("#" + e.id + " ul").css("display", "none");
            }
        });

$(".parents").each(function(){
            // Collapse all children that does not
            // belongs to the opened list
            id = $(this).attr('id');
            if(id != selected) {
                $("#" + id + " ul").css("display", "none");
            }
        });

e通常是指一个事件,但作为你唯一的循环元素,那里没有事件,因此在每个元素中你都可以使用它。