2014-03-28 38 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() {