2016-03-09 386 views
1

我想在點擊按鈕後通過添加額外的類addClass("open");顯示一個隱藏的div,然後使用css在它處於活動狀態時顯示它們open class。如何在點擊按鈕後再次顯示和隱藏div

$(".btt").click(function(event){ 
 
    ($(event.currentTarget).parent().parent()).addClass("open"); 
 
});
.surveySummaryList>li .surveySummaryMenu { 
 
    background: rgba(0, 0, 0, 0.6); 
 
    position:absolute; 
 
    left: 100%; 
 
    top: 0; 
 
    display: none; 
 
    color: white; 
 
    width: 100%; 
 
    min-width: 250px; 
 
    z-index: 1001; 
 
} 
 

 
.surveySummaryList>li.open >.surveySummaryMenu { 
 
    display: inherit; 
 
    transition: all 1s; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/> 
 
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<ul class="nav surveySummaryList"> 
 
    <li> 
 
    <a href="javascript:" data-bind="click: $root.surveyClicked"> 
 
     <span>Name</span> 
 
     <button class=" btt pull-right glyphicon glyphicon-chevron-right"></button> 
 
    </a> 
 
    <div class="surveySummaryMenu"> 
 
     <ul class="nav navbar"> 
 
     <li> 
 
      <a href="javascript:" data-bind="click: $root.surveyClicked"> 
 
      <span> Sub Name </span> 
 
      </a> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    </li> 
 
</ul>

而且,只有當我點擊該按鈕,在div class= surveySummaryMenu應顯示,即使我點擊這個標籤<a>,它不應該顯示。它似乎工作,但後點擊按鈕後,div .surveySummaryMenu將保持永久,我怎麼能在點擊其他地方後再次隱藏它,而不是按鈕?

+0

爲什麼你會把一個按鈕放在一個錨點中?你不需要任何的數據綁定attrs,而不是使用parent(),你可以給一個id或一個類到想要定位的div然後選擇它,最後選擇內部的任何內容都將繼承其父事件。 – ctf0

+0

因爲我只在點擊按鈕時才顯示hide div。即使我點擊一個標籤,它不應該顯示 – Son

回答

1

當您想要使用event對象作爲event.currentTarget時,您需要將它傳遞給回調函數。

這樣的:

$(".btt").click(function(event) { 

工作代碼:

$(".btt").click(function() { 
 
    $(this).parent().parent().addClass("open"); 
 
}); 
 

 
$('.nav a').click(function(event) { 
 
    event.stopPropagation(); 
 
}); 
 

 
$(document).on('click', function() { 
 
    $('.open').removeClass('open'); 
 
});
.surveySummaryList>li .surveySummaryMenu { 
 
    background: rgba(0, 0, 0, 0.6); 
 
    position:absolute; 
 
    left: 100%; 
 
    top: 0; 
 
    display: none; 
 
    color: white; 
 
    width: 100%; 
 
    min-width: 250px; 
 
    z-index: 1001; 
 
} 
 

 
.surveySummaryList>li.open >.surveySummaryMenu { 
 
    display: inherit; 
 
    transition: all 1s; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/> 
 
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<ul class="nav surveySummaryList"> 
 
    <li> 
 
    <a href="javascript:" data-bind="click: $root.surveyClicked"> 
 
     <span>Name</span> 
 
     <button class=" btt pull-right glyphicon glyphicon-chevron-right"></button> 
 
    </a> 
 
    <div class="surveySummaryMenu"> 
 
     <ul class="nav navbar"> 
 
     <li> 
 
      <a href="javascript:" data-bind="click: $root.surveyClicked"> 
 
      <span> Sub Name </span> 
 
      </a> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    </li> 
 
</ul>

注意順便說一句,你可以使用$(this)代替$(event.currentTarget) - 我被更改了代碼,所以你可以在代碼片段中看到它。

+0

感謝Mosh,它的工作原理,我想問的另一個問題是:現在當我們點擊按鈕,顯示新的div,很明顯。但是,那麼它會永遠留在那裏,我想。我在其他地方點擊後如何再次隱藏它們,例如 – Son

+0

我已更新答案。讓我知道你是否可以用它。 –

+0

它的工作原理,但我可以用這個代碼來代替Mosh嗎? '!($(「。btt」))。click(function(){ \t \t $('。open')。removeClass('open'); \t});' – Son

相關問題