Estou usando o Twitter Bootstrap e suas "guias".
Eu tenho o seguinte código:
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#add">add</a></li>
<li><a data-toggle="tab" href="#edit" >edit</a></li>
<li><a data-toggle="tab" href="#delete" >delete</a></li>
</ul>
As guias funcionam corretamente, mas no URL não é adicionado o #add, #edit, #delete.
Quando eu removo data-toggle
o URL muda, mas as guias não funcionam.
Alguma solução para isso?
jquery
twitter-bootstrap
Ivanka Todorova
fonte
fonte
Respostas:
Experimente este código. Ele adiciona a guia href ao url + abre a guia com base no hash no carregamento da página:
fonte
&&
significaAND
que se a esquerda dissohash
for igual a verdadeiro ( não é 0, nulo ou vazio) e a direita for igual a verdadeiro, então faça algo, porém a linha termina com um,;
então não há nada a fazer antes;
e não importa se um guia é mostrado ou não e não importa o que.tab('show')
retorna, ele ainda tentará. Ao avaliar a lógica desta forma, se a primeira parte da equação (antes&&
) for falsa, não há necessidade de continuar avaliando, portanto a guia não será exibida. Você pode obter o mesmo efeito desta forma:if(hash){ $('ul.nav a[href="' + hash + '"]').tab('show'); }
a && b;
significa tentara
e, apenas se for verdade, tenteb
. As strings são verdadeiras se não estiverem vazias.Existem três componentes necessários para uma solução completa:
Não creio que nenhum dos comentários aqui, nem a resposta aceita, dê conta de todos esses cenários.
Como há bastante coisa envolvida, acho que é mais legal como um pequeno plugin jQuery: https://github.com/aidanlister/jquery-stickytabs
Você pode chamar o plug-in assim:
Fiz uma postagem no blog sobre isso, http://aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
fonte
Usando
data-toggle="tab"
pede ao plugin para lidar com as abas, que ao fazer isso chamapreventDefault
o evento ( código no github ).Você pode usar a ativação de sua própria guia e deixar o evento prosseguir:
E você deve remover o atributo
data-toggle="tab"
Verifique o doc se tiver dúvidas.
fonte
Como seus elementos âncora já mudam o hash do url, ouvir o evento onhashchange é outra boa opção. Como @flori já mencionou, esse método funciona bem com o botão Voltar do navegador.
Por fim, acionar o evento logo após definir o ouvinte também ajudará a mostrar a guia correta no carregamento da página.
fonte
Minha solução para o seu problema:
Primeiro, adicione um novo
data-value
atributo a cadaa
link, como este:Em segundo lugar, altere os ids das guias, por exemplo, de
add
paratab-add
, atualize também hrefs para incluir otab-
prefixo:E finalmente o código js:
Aqui está o jsFiddle - mas não funciona por causa do iframe usado pelo jsFiddle, mas você pode ler a fonte da minha solução.
fonte
Mesmo problema com o CakePHP com Bootstrap 3 Tabs, mais quando eu envio com URL externa e âncora, ele salta para a seção perdendo meu menu, após revisar várias soluções feitas isso ...
obrigado a: http://ck.kennt-wayne.de/2012/dec/twitter-bootstrap-how-to-fix-tabs
fonte
Também existe uma maneira simples de reagir às alterações de hash (por exemplo, botão Voltar). Basta adicionar um ouvinte de evento hashchange à solução tomaszbak:
fonte
Estou usando o Bootstrap 3.3. * E nenhuma das soluções acima me ajudou, mesmo marcada como resposta um. Acabei de adicionar o script abaixo e funcionou.
Espero que isso ajude você.
fonte
Mais simples, supondo que você esteja usando a
data-toggle="tab"
sintaxe documentada descrita aqui :fonte
Para aqueles que usam Ruby on Rails ou qualquer outro script do lado do servidor, você vai querer usar a
anchor
opção de caminhos. Isso ocorre porque, uma vez que a página carrega, ela não tem o hash de URL disponível. Você deve fornecer a guia correta por meio de seu link ou envio de formulário.Se você estiver usando um prefixo para evitar que a janela pule para o id:
Então você CoffeeScript:
Ou JavaScript:
Isso deve funcionar no Bootstrap 3.
fonte
Obrigado a @tomaszbak pela solução original, entretanto, como minhas edições foram rejeitadas e não posso comentar sobre sua postagem, deixarei minha versão um pouco melhorada e mais legível aqui.
Ele faz basicamente a mesma coisa, mas se corrige o problema de compatibilidade entre navegadores que tive com o dele.
fonte
Aqui está uma opção de usar
history.pushState
para que você possa usar o histórico do seu navegador para voltar a uma guia anteriorfonte
Nenhuma das opções acima funcionou para mim, então aqui está como fiz o meu funcionar:
class="tab-link"
a todos os links que precisam desta funcionalidadefonte
Eu entendi que o OP disse usando JQuery, mas você pode simplesmente usar o vanilla JS para fazer isso:
fonte
Isso também corrige uma guia extremamente obscura, um href que não dispara ao usar jquery e bootstrap
fonte