Я использую Twitter Bootstrap и его «вкладки».
У меня такой код:
<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>
Вкладки работают правильно, но в URL не добавлены #add, #edit, #delete.
Когда я удаляю data-toggle
URL, меняются, но вкладки не работают.
Какие-нибудь решения для этого?
jquery
twitter-bootstrap
Иванка Тодорова
источник
источник
Ответы:
Попробуйте этот код. Он добавляет вкладку href в url + открывает вкладку на основе хеша при загрузке страницы:
источник
&&
означает,AND
что если левый от негоhash
равен true ( не равен 0, null или пустой), а правый равен true, то сделайте что-нибудь, однако строка заканчивается на,;
поэтому раньше делать нечего,;
и не имеет значения, если вкладка отображается или нет, и неважно, что.tab('show')
возвращается, она все равно будет пытаться. При оценке логики таким образом, если первая часть уравнения (до&&
) ложна, нет необходимости продолжать оценку, поэтому вкладка не будет отображаться. Вы можете добиться того же эффекта вот так:if(hash){ $('ul.nav a[href="' + hash + '"]').tab('show'); }
a && b;
значит попробовать,a
и только если это правда, попробуйтеb
. Строки верны, если они не пусты.Для полного решения необходимы три компонента:
Я не думаю, что ни один из приведенных здесь комментариев или принятый ответ справляется со всеми этими сценариями.
Поскольку это довольно сложно, я думаю, что он лучше всего как небольшой плагин jQuery: https://github.com/aidanlister/jquery-stickytabs
Вы можете вызвать плагин так:
Я написал об этом сообщение в блоге http://aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
источник
Использование
data-toggle="tab"
просит плагин обрабатывать вкладки, которые при этом вызываютpreventDefault
событие ( код на github ).Вы можете использовать собственную активацию вкладки и позволить событию пройти:
И вы должны удалить атрибут
data-toggle="tab"
Проверьте в документ , если у вас есть сомнения.
источник
Поскольку ваши элементы привязки уже меняют хэш URL-адреса, прослушивание события onhashchange - еще один хороший вариант. Как уже упоминал @flori, этот метод отлично работает с кнопкой возврата в браузере.
Наконец, запуск события сразу после того, как вы определите слушателя, также поможет отображать правильную вкладку при загрузке страницы.
источник
Мое решение вашей проблемы:
Сначала добавьте новый
data-value
атрибут к каждойa
ссылке, например:Во-вторых, измените идентификаторы вкладок, например с
add
наtab-add
, также обновите hrefs, чтобы включитьtab-
префикс:И, наконец, код js:
Вот jsFiddle - но он не работает из-за iframe, используемого jsFiddle, но вы можете прочитать источник моего решения.
источник
Та же проблема с CakePHP с вкладками Bootstrap 3, плюс, когда я отправляю с внешним URL-адресом и привязкой, он переходит в раздел, теряя мое меню, после просмотра многие решения сделали это ...
спасибо: http://ck.kennt-wayne.de/2012/dec/twitter-bootstrap-how-to-fix-tabs
источник
Существует также простой способ реагировать на изменения хэша (например, кнопка «Назад»). Просто добавьте прослушиватель событий hashchange в решение tomaszbak:
источник
Я использую Bootstrap 3.3. *, И ни одно из вышеперечисленных решений мне не помогло, даже помечено как ответ один. Я просто добавил ниже скрипт и работал.
Надеюсь, это тебе поможет.
источник
Самый простой, если вы используете документированный
data-toggle="tab"
синтаксис, описанный здесь :источник
Тем, кто использует Ruby on Rails или любой другой скрипт на стороне сервера, вы захотите использовать
anchor
опцию для путей. Это связано с тем, что после загрузки страницы хеш URL-адреса недоступен. Вы захотите указать правильную вкладку с помощью ссылки или отправки формы.Если вы используете префикс для предотвращения перехода окна к идентификатору:
Тогда вам CoffeeScript:
Или JavaScript:
Это должно работать в Bootstrap 3.
источник
Спасибо @tomaszbak за оригинальное решение, однако, поскольку мои правки были отклонены, и я не могу комментировать его сообщение, я оставлю здесь немного улучшенную и более читаемую версию.
Он делает в основном то же самое, но если исправляет проблему кроссбраузерной совместимости, которую я имел с его.
источник
Вот вариант использования
history.pushState
, позволяющий использовать историю браузера для возврата на предыдущую вкладкуисточник
Ничего из вышеперечисленного у меня не сработало, поэтому вот как я получил свою работу:
class="tab-link"
ко всем ссылкам, требующим этой функцииисточник
Я понял, что OP сказал, используя JQuery, но вы можете просто использовать vanilla JS для этого:
источник
Это также исправляет чрезвычайно непонятную вкладку, href не срабатывает при использовании jquery и bootstrap.
источник