Estoy usando Twitter Bootstrap y sus "pestañas".
Tengo el siguiente 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>
Las pestañas funcionan correctamente, pero en la URL no se agrega #add, #edit, #delete.
Cuando elimino data-toggle
la URL cambia, pero las pestañas no funcionan.
¿Alguna solución para esto?
jquery
twitter-bootstrap
Ivanka Todorova
fuente
fuente
Respuestas:
Prueba este código. Agrega la pestaña href a la url + abre la pestaña según el hash en la carga de la página:
fuente
&&
significaAND
que si la izquierda de eso equivale a verdadero (hash
no es 0, nulo o vacío) y la derecha equivale a verdadero, entonces haz algo, sin embargo, la línea termina con un,;
por lo que no hay nada que hacer antes;
y no importa si un La pestaña se muestra o no y no importa lo que.tab('show')
regrese, igual lo intentará. Al evaluar la lógica de esta manera, si la primera parte de la ecuación (antes&&
) es falsa, no hay necesidad de continuar evaluando, por lo que no se mostrará la pestaña. Podría lograr el mismo efecto así:if(hash){ $('ul.nav a[href="' + hash + '"]').tab('show'); }
a && b;
significa probara
y luego, solo si es cierto, inténtalob
. Las cadenas son verdaderas si no están vacías.Hay tres componentes necesarios para una solución completa:
No creo que ninguno de los comentarios aquí, ni la respuesta aceptada, manejen todos estos escenarios.
Como hay bastante involucrado, creo que es mejor como un pequeño complemento de jQuery: https://github.com/aidanlister/jquery-stickytabs
Puedes llamar al complemento así:
Hice una publicación de blog para esto, http://aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
fuente
Usando
data-toggle="tab"
le pide al complemento que maneje las pestañas, que mientras lo hace llamapreventDefault
al evento ( código en github ).Puede usar la activación de su propia pestaña y dejar que el evento pase:
Y debes eliminar el atributo
data-toggle="tab"
Consulte el documento si tiene dudas.
fuente
Como sus elementos de anclaje ya cambian el hash de la URL, escuchar el evento onhashchange es otra buena opción. Como @flori ya mencionó, este método funciona bien con el botón de retroceso del navegador.
Finalmente, activar el evento justo después de definir el oyente también ayudará a mostrar la pestaña derecha al cargar la página.
fuente
Mi solución a tu problema:
Primero agregue un nuevo
data-value
atributo a cadaa
enlace, así:En segundo lugar, cambie los identificadores de las pestañas, por ejemplo, de
add
atab-add
, también actualice hrefs para incluir eltab-
prefijo:Y finalmente el código js:
Aquí está jsFiddle , pero no funciona debido al iframe utilizado por jsFiddle, pero puede leer la fuente de mi solución.
fuente
El mismo problema con CakePHP con Bootstrap 3 Tabs, además, cuando envío con una URL externa y un ancla, salta a la sección perdiendo mi menú, después de revisar muchas soluciones hicieron esto ...
gracias a: http://ck.kennt-wayne.de/2012/dec/twitter-bootstrap-how-to-fix-tabs
fuente
También hay una forma sencilla de reaccionar ante los cambios de hash (por ejemplo, botón de retroceso). Simplemente agregue un detector de eventos hashchange a la solución tomaszbak:
fuente
Estoy usando Bootstrap 3.3. * Y ninguna de las soluciones anteriores me ayudó, incluso marcada como la respuesta uno. Acabo de agregar el siguiente script y trabajé.
Espero que esto te ayude.
fuente
Más simple, asumiendo que está utilizando la
data-toggle="tab"
sintaxis documentada que se describe aquí :fuente
Para aquellos que usan Ruby on Rails o cualquier otro script del lado del servidor, querrán usar la
anchor
opción en rutas. Esto se debe a que una vez que se carga la página, no tiene el hash de URL disponible. Deberá proporcionar la pestaña correcta a través de su enlace o envío de formulario.Si está utilizando un prefijo para evitar que la ventana salte a la identificación:
Entonces CoffeeScript:
O JavaScript:
Esto debería funcionar en Bootstrap 3.
fuente
Gracias a @tomaszbak por la solución original, sin embargo, dado que mis ediciones fueron rechazadas y aún no puedo comentar en su publicación, dejaré mi versión ligeramente mejorada y más legible aquí.
Básicamente hace lo mismo, pero si soluciona el problema de compatibilidad entre navegadores que tuve con el suyo.
fuente
Aquí hay una opción que se usa
history.pushState
para que pueda usar el historial de su navegador para volver a una pestaña anteriorfuente
Nada de lo anterior funcionó para mí, así que así es como hice que funcionara el mío:
class="tab-link"
a todos los enlaces que necesitan esta funcionalidadfuente
Entendí que OP dijo usar JQuery, pero simplemente puede usar Vanilla JS para hacer eso:
fuente
Esto también corrige una pestaña extremadamente oscura a href que no se activa cuando se usa jquery y bootstrap
fuente