Щебетать вкладки бутстрапа и события javascript
Я использую twitter bootstrap для проекта - в частности его вкладки (http://twitter.github.com/bootstrap/javascript.html#tabs)
Теперь у меня есть этот список, и когда я нажимаю вкладку, он переключается на содержимое каждой отдельной вкладки. Однако этот контент предварительно загружается на страницу (HTML-код для содержимого всех вкладок уже существует, вы меняете видимость только нажатием вкладок).
Однако я хочу только динамически загружать контент, когда нажимается определенная вкладка, поэтому вы получите последние данные вместо данных, когда была загружена вся страница.
Я планирую использовать jQuery для этого. Однако как я могу это сделать, когда при нажатии вкладки вызывается определенная функция jquery?
Я попытался показать предупреждение, когда была нажата вкладка (если это работает, функция jQuery тоже), но даже это не работает:
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript" src="http://twitter.github.com/bootstrap/1.4.0/bootstrap-tabs.js"></script>
<script type="text/javascript">
$(function() {
$('.tabs').bind('click', function (e) {
e.target(window.alert("hello"))
});
});
</script>
И мой html:
<ul class="tabs" data-tabs="tabs">
<li class="active"><a href="#tab1">tab 1</a></li>
<li><a href="#tab2">tab 2</li>
</ul>
<div id="my-tab-content" class="tab-content">
<div class="tab-pane" id="tab1">
<h1>Tab1</h1>
<p>orange orange orange orange orange</p>
</div>
<div class="tab-pane" id="tab2">
<h1>Tab2</h1>
<p>blue blue blue blue blue</p>
</div>
</div>
Любая идея о том, как сделать эту работу?
см. это для работы вкладок twitter bootstrap: (http://twitter.github.com/bootstrap/javascript.html#tabs)
и файл js, который он использует:
http://twitter.github.com/bootstrap/1.4.0/bootstrap-tabs.js
Ответы
Ответ 1
Связывание, кажется, выполняется до того, как DOM готов. Кроме того, ваш селектор, кажется, сломан, и вы можете привязать изменение только к избранным элементам. Вы должны работать, нажимая и применяя некоторую логику. Попробуйте
$(function() {
$('.tabs').bind('click', function (e) {
e.target(window.alert("hello"))
});
});
UPDATE
После консультаций с документацией кажется, что в вашем коде отсутствовала готовая часть DOM, остальное на самом деле не было ошибкой, а это означает, что в соответствии с документами должно работать следующее:
$(function() {
$('.tabs').bind('change', function (e) {
// e.target is the new active tab according to docs
// so save the reference in case it needed later on
window.activeTab = e.target;
// display the alert
alert("hello");
// Load data etc
});
});
Что вызвало путаницу в том, что плагин переопределяет селектор по умолчанию, делая #.tabs
действительным, а также добавляя событие изменения к элементу табуляции. Подумайте, почему они решили, что этот синтаксис - отличная идея.
В любом случае вы можете попробовать второй образец и прокомментировать, что предупреждение запускается до или после изменения вкладки.
EDIT: исправлено исключение jquery, вызванное #.tabs
селектором
Ответ 2
С Twitter Bootstrap версии 2 документированный способ подписаться на события изменения табло -
$('a[data-toggle="tab"]').on('shown', function (e) {
e.target // activated tab
e.relatedTarget // previous tab
})
Последняя документация по событиям вкладки Twitter Bootstrap можно найти в http://getbootstrap.com/javascript/#tabs
Ответ 3
Если вы используете 2.3.2 и он не работает, попробуйте использовать:
$(document).on("shown", 'a[data-toggle="tab"]', function (e) {
console.log('showing tab ' + e.target); // Active Tab
console.log('showing tab ' + e.relatedTarget); // Previous Tab
});
2.3.2 использование табуляции: http://getbootstrap.com/2.3.2/javascript.html#tabs
Если вы играете с версией 3 (в настоящее время RC2), то документация показывает
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
console.log('showing tab ' + e.target); // Active Tab
console.log('showing tab ' + e.relatedTarget); // Previous Tab
})
Вкладки RC2 Использование: http://getbootstrap.com/javascript/#tabs-usage
Ответ 4
Вы можете использовать следующий фрагмент кода в bootstrap 3
$(document).on( 'shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
var activatedTab = e.target; // activated tab
})
Ответ 5
Как использовать клик? Вот так:
$('#.tabs').click(function (e) {
e.target(window.alert("hello"))
})
Ответ 6
У вас есть ошибка в синтаксисе, относящемся к селектору:
$('#.tabs') // should be ...
$('.tabs');
Неупорядоченный список имеет класс, называемый вкладками в вашем HTML, тогда как вы изначально пытались выбрать элемент с id.tabs '.
И вам также нужно будет принять предложение мантикори. Вы можете использовать 'change' для элементов формы.
$(document).ready(function() {
$('.tabs').click(function(e) {
e.preventDefault();
alert('tab clicked!');
});
});
Ответ 7
Документация говорит: используйте событие show
.