Atualmente, estou usando guias com o Twitter Bootstrap e desejo selecionar a mesma guia depois que um usuário postar dados e a página recarregar.
Como isso é feito?
Minha chamada atual para inti the tabs se parece com isto:
<script type="text/javascript">
$(document).ready(function() {
$('#profileTabs a:first').tab('show');
});
</script>
Minhas guias:
<ul id="profileTabs" class="nav nav-tabs">
<li class="active"><a href="#profile" data-toggle="tab">Profile</a></li>
<li><a href="#about" data-toggle="tab">About Me</a></li>
<li><a href="#match" data-toggle="tab">My Match</a></li>
</ul>
Respostas:
Você terá que usar localStorage ou cookies para gerenciar isso. Aqui está uma solução rápida e suja que pode ser amplamente melhorada, mas pode fornecer um ponto de partida:
fonte
$(this).attr('href')
vez de$(e.target).attr('id')
fornecer o hash sem o url completo. Você também deve aplicar o.tab()
na tag a comdata-toggle="tab"
em vez de$('#'+lastTab)
. Veja também: stackoverflow.com/questions/16808205/…shown
não parece mais funcionar, tive que mudá-lo parashown.bs.tab
. Nota: Eu entendo javascript e outros tão bem quanto entendo de economia ... então, alguém que sabe o que está acontecendo sinta-se à vontade para me corrigir.Fiz isso funcionar usando cookies e também removendo a classe 'ativa' de quaisquer outras guias e painéis de guia ... e adicionando a classe 'ativa' à guia e painel de guias atuais.
Tenho certeza de que há uma maneira melhor de fazer isso, mas parece funcionar neste caso.
Requer o plugin de cookie jQuery.
fonte
Todas as outras respostas estão corretas. Essa resposta levará em consideração o fato de que se pode ter vários
ul.nav.nav-pills
ouul.nav.nav-tabs
na mesma página. Nesse caso, as respostas anteriores falharão.Ainda usando,
localStorage
mas com um stringifiedJSON
como valor. Aqui está o código:Este bit pode ser usado em todo o aplicativo em todas as páginas e funcionará com guias e pílulas. Além disso, certifique-se de que as guias ou pílulas não estejam ativas por padrão , caso contrário, você verá um efeito de oscilação no carregamento da página.
Importante : verifique se o pai / mãe
ul
tem uma identificação. Obrigado Alainfonte
Para a melhor opção, use esta técnica:
fonte
Eu prefiro armazenar a guia selecionada no hashvalue da janela. Isso também permite o envio de links para colegas, que então verão "a mesma" página. O truque é alterar o hash do local quando outra guia for selecionada. Se você já usa # em sua página, possivelmente a hashtag deve ser dividida. No meu aplicativo, eu uso ":" como separador de valor hash.
fonte
<asp:LinkButton CssClass="form-search" ID="LinkButtonSearch" runat="server">Search</asp:LinkButton>
botão do link , depois de clicar no botão, é a guia padrão que se torna ativa, não a guia atual. como posso consertar isso?Para evitar que a página pisque na primeira guia e depois na guia que foi salva pelo cookie (isso ocorre quando você determina a classe "ativa" por padrão na primeira TAB)
Remova a classe "ativa" de guias e painéis como:
Coloque o script abaixo para definir a primeira guia como padrão (requer o plugin de cookie jQuery)
fonte
Quer efeito de esmaecimento? Versão atualizada do código de @ Oktav:
class="tab-pane fade"
Código:
fonte
Eu tinha abas em várias páginas e localStorage mantém o lastTab das páginas anteriores também, então para a próxima página, uma vez que ele tinha o lastTab da página anterior armazenado, não encontrou nenhuma aba correspondente aqui, então nada estava sendo exibido. Eu modifiquei dessa forma.
editar: notei que terei que ter
lastTab
nomes de variáveis diferentes para páginas diferentes, caso contrário, eles sempre sobrescreverão uns aos outros. por exemplolastTab_klanten
,lastTab_bestellingen
etc. para duas páginas diferentesklanten
ebestellingen
ambas com dados exibidos em guias.fonte
Fiz funcionar com solução semelhante ao @dgabriel, neste caso, os links
<a>
não precisamid
, ele identifica a aba atual com base na posição.fonte
indexTab
duas vezes, mas é um diff. índice. Então, vou ligar para o segundolastIndexTab
. Em relação ashown
, isso é um evento, então não será disparado até que você abra uma guia, então não importa se é antesgetItem
.Eu sugiro as seguintes mudanças
Use um plug-in como amplify.store que fornece uma API de armazenamento local crossbrowser / crossplatform com fallbacks integrados.
Direcione a guia que precisa ser salva
$('#div a[data-toggle="tab"]')
para estender essa funcionalidade a vários contêineres de guia que existem na mesma página.Use um identificador exclusivo
(url ??)
para salvar e restaurar as últimas guias usadas em várias páginas.fonte
Solução simples sem armazenamento local:
fonte
Abordagem do lado do servidor. Certifique-se de que todos os elementos html tenham class = "" caso não seja especificado ou você precisará lidar com nulos.
fonte
Se você quiser mostrar a primeira guia na primeira vez que entrar na página, use este código:
fonte
Aqui está um trecho que fiz que funciona com Bootstrap 3 e jQuery e com URLs diferentes contendo guias diferentes . Ele não oferece suporte a várias guias por página, mas deve ser uma modificação fácil se você precisar desse recurso.
fonte
$ (document) .ready (function () {
});
fonte
se você tiver mais de uma guia na página, pode usar o seguinte código
fonte
Isso irá atualizar as guias, mas somente depois que tudo no controlador for carregado.
fonte
Estou usando isso com MVC:
Seção JavaScript:
Seção HTML:
fonte