试图触发影响其子元素的函数

时间:2012-04-30 02:01:02

标签: jquery

我正在尝试创建一个类似于博客功能的手风琴,首先你会看到一组行(确切地说是100px),当你点击博客标题时,博客文章会扩展到它的全部高度。

这是我到目前为止所做的:

HTML:

                    <ul class="blog">

                        <li class="list-item">
                            <div class="list-item-left">
                                <h2 class="expand">Project Eden</h2>

                                <time>07.08.2012</time>
                            </div>
                            <div class="list-item-right">
                                <p>"Sed ut perspiciatis unde </p>                                   
                            </div>
                            <div class="list-item-whitespace"></div>
                        </li>

                        <li class="list-item">
                            <div class="list-item-left">
                                <h2>Project Eden</h2>

                                <time>07.08.2012</time>
                            </div>
                            <div class="list-item-right">
                                <p>"Sed ut perspiciatis unde</p>
                            </div>
                            <div class="list-item-whitespace"></div>
                        </li>

</ul>

jQuery:

var $listItems = $('.list-item');
var closedHeight = 100;
var slideSpeed = 1000;

$(".list-item").click(function() {
  if($(".list-item:animated").length) 
    return false;
}).toggle(function() { 
        var openHeight = $(this).parents("div:first").find(".list-item-right").height();
    $(this).animate({height:openHeight}, slideSpeed,"easeOutExpo");
    $(this).children('.list-item-whitespace').css({'display':'none'});
}, function(){
        $(this).animate({height:100}, slideSpeed,"easeOutExpo");
        $(this).children('.list-item-whitespace').css({'display':'block'});  
});

基本上我们正在做什么(根据我的理解,当涉及到jQuery时,我就是新手!):

我们在变量中存储了一些信息,然后我们定义了一个函数,它将.list-item扩展到.list-item-right的实际高度,当我们再次点击它时它将恢复为它的“封闭”高度为100px。

现在,我想要做的是在点击.list-item时没有.toggle事件或.click事件。

相反,我希望它仅在您单击.expand类或.list-item-left h2(如果愿意)时触发。

如果这对任何人都有意义,请告诉我我在哪里不知所措。

祝你好运, K.

1 个答案:

答案 0 :(得分:1)

我就是这样做的。它需要重新调整你的html。您将列表项内容包含在父div中。您可以使用它来找出未溢出的高度。

展开列表项时,添加一个打开或关闭的类,以便了解状态。

我也摆脱了我想象的清理div并给出了容器div overflow: auto,这使得包含的元素自我清晰。

http://jsfiddle.net/WZVb6/1/

//set all blog posts to 100px to start
$('li.list-item h2').click(function() {
    $this = $(this);
    var nheight = $this.closest('.naturalheight').height();

    if ($this.hasClass('open')) {
        $this.closest('li').animate({
            height: 100
        });
        $this.removeClass('open');
    }
    else {
        $this.closest('li').animate({
            height: nheight
        });
        $this.addClass('open');
    }

});​