2011-11-30 2 views
3

Что я хочу - сначала скрыть все содержимое, а затем щелкнуть по одной вкладке, отобразится соответствующий контент (вкладка станет активной), где щелкнуть ее снова, она исчезнет. некоторые из вкладок - это просто ссылка «mailto».JavaScript показать/скрыть вкладку

Проблема в том, что я не могу скрыть вкладки, когда нажмите снова

$(document).ready(function(){ 
    $('#nav div').hide(); 
    $('#nav div:first').show(); 
    $('#nav ul li:first').addClass('active'); 
    $('#nav ul li a').click(function(){ 
     $('#nav div').hide(); 
     $('#nav ul li').removeClass('active'); 
     $(this).parent().addClass('active'); 
     var currentTab = $(this).attr('href'); 
     if($(currentTab).css('display')=='none'){ 
      $(currentTab).show(); 
     }else{ 
      $(currentTab).hide(); 
     } 

    } 
); 
}); 

навигации код выглядит следующим образом:

<div id="nav"> 
    <ul> 
     <li><a href="#about">About</a></li> 
     <li><a href="mailto:email">Email</a></li> 
     <li><a href="#contact">Contact</a></li> 
    </ul> 
    <div id="about"> 
     about 
    </div> 
    <div id="contact"> 
     contact 
    </div> 
</div> 
+0

В чем проблема, с которой вы сталкиваетесь? какая часть не работает? – mithunsatheesh

+0

О, им жаль! не скрывать вкладки при повторном нажатии. Я обновил вопрос. – Rex

+0

Что вы хотите, чтобы щелкнуть ссылку электронной почты? –

ответ

2

Это должно работать:

$(function() { 
    $('#nav div').hide(); 
    $('#nav div:first').show(); 
    $('#nav ul li:first').addClass('active'); 
    $('#nav ul li a').click(function(){ 
     var currentTab = $(this).attr('href'); 
     var vis = $(currentTab).is(':visible'); 
     $('#nav div').hide(); 
     $('#nav ul li').removeClass('active'); 
     $(this).parent().addClass('active'); 
     if(vis) { 
      $(currentTab).hide(); 
     } else { 
      $(currentTab).show(); 
     } 
    }); 
}); 

вы должны проверить, если текущая вкладка видна перед тем скрыть его.

рабочий: http://jsfiddle.net/tqhHA/

1

Изменение функции Зарегистрированным:

$('#nav ul li a').click(function(){ 
    var currentTab = $(this).attr('href'); 
    $('#nav div').not(currentTab).hide(); 
    $('#nav ul li').removeClass('active'); 
    $(this).parent().toggleClass('active');  
    if (currentTab.indexOf("mailto:") === -1) 
    { 
     $(currentTab).toggle(); 
    } 
}); 

Working example

+0

жаль, что я пробовал это, но не совсем работал, так как второй клик не будет скрывать вкладки. но очень возможно, что я внедрил это неправильно, спасибо !!! – Rex

+0

@Rex работает в примере, который я добавил к моему ответу –

+0

. Я нашел в примере, что, когда отображается содержимое «около», нажатие «около» снова не будет скрывать содержимое. – Rex

1
$(document).ready(function(){ 
$('#nav div').hide(); 
$('#nav div:first').show(); 
$('a').click(function(){  
    var currentTab = '#'+$(this).text().toLowerCase(); 
    if($(currentTab).is(':visible')){ 
     $('#nav div').hide(); 
     $(currentTab).hide(); 
    }else{ 
     $('#nav div').hide(); 
     $(currentTab).show(); 
    } 
} 
); 
}); 


<div id="nav"> 
    <ul> 
     <li><a href="#">About</a></li> 
     <li><a href="#">Email</a></li> 
     <li><a href="#">Contact</a></li> 
    </ul> 
    <div id="about"> 
     about 
    </div> 
    <div id="contact"> 
     contact 
    </div> 
</div> 

Пожалуйста, попробуйте выше код .. меняю HREF значение просто "#", то некоторые изменения в JQuery. Пожалуйста, спросите в комментарии, если у вас есть какие-либо сомнения. click here to test

Смежные вопросы