2014-03-28 37 views
1

我今天不能直白思考,有人能告诉我我现在找不到的更正吗?我意识到我正在做一些愚蠢的事情,我找不到。基本上第二个功能应该关闭盒子,但它根本不工作。有条件的jquery通过检查类

if (!$('div').hasClass('active')) { 
    $("span").click(function() { 
     $("div").stop().animate({ height: "360px" }); 
     $("div").addClass('active'); 
}); 
} 

if ($('div').hasClass('active')) { 
    $("span").click(function() { 
     $("div").animate({ height: "0px" }); 
     $("div").removeClass('active'); 
}); 
} 

http://jsfiddle.net/9xqWF/

+1

谢谢大家! – mike

回答

1

你的问题是,你是基于一个条件结合多个事件处理程序,而不是绑定一个事件处理程序和处理程序中检查条件:

$("span").click(function() { 
    if($('div').hasClass('active')) 
     $("div").animate({ height: "0px" }).removeClass('active'); 
    else 
     $("div").stop().animate({ height: "360px" }).addClass('active'); 
}); 

http://jsfiddle.net/fmpeyton/BW8LM/

+1

虽然我同意您对简化点击处理程序的意见,这仍然不可能是OP想要做的 - 这些内部选择器适用于任何地方的每一个div。这些选择器的更多背景当然是需要的。 (请参阅我在另一个答案中的意见) – DrLivingston

+2

我同意在类似情况的制作中对文本进行标记,但我相信OP只是获得概念验证的工作。这就是为什么我回答我所做的方式。假设否则就是这样;假设。 –

+1

我只是觉得值得指出。 (在明天的问题是“为什么我所有的div都消失了?”)鉴于这个例子的结构,我认为OP认为还有更多的上下文,所以有必要指出sans-second-parameter应用所有的选择器到整个DOM。 – DrLivingston

1

问题是你的事件应该通过点击触发,你拥有它的方式,它会检查类active只需一次,然后定义1个点击功能(您只需要1个)。所以,试试这个:

$("span").click(function() { 
    if (!$('div').hasClass('active')) { 
     $("div").stop().animate({ height: "360px" }).addClass('active');  
    } else { 
     $("div").animate({ height: "0px" }).removeClass('active'); 
    } 
}); 

Sample JSFiddle

2

if语句只执行一次,并仅作为条件之一可以是真实的,你将有只有一个处理程序,不会做你期待什么,你应该逻辑移动到click处理程序:

var $div = $('div'); 
$("span").click(function() { 
    var h = $div.toggleClass('active') 
       .hasClass('active') ? '0px' : '360px'; 
    $div.stop().animate({ height: h }); 
}); 
1

你永远不添加第二个。点击事件,因为条件$('div').hasClass('active')为n加载您的网页时有罪......

1

您需要将您的内部调用上下文化为jQuery,您在所有div上调用它们而不仅仅是'active'

$("div").stop().animate({ height: "360px" }); 
    $("div").addClass('active'); 

这些行不是特定于div的。没有确切知道你需要做的,我不知道正确的价值就在这里什么,但很可能上涨,你需要像这样的内容:

if ($('div').hasClass('active')) { 
    var myDiv = this; 
    $("span").click(function() { 

此外,该span不语境其中任何一个跨度,一个在div?你可以这样做:

$("span", this).click(function() {