Ответ 1
Попробуйте следующее:
$('body').tooltip({
selector: '[rel=tooltip]'
});
Я использую всплывающие подсказки Twitter-бутстрапа с помощью javascript, например:
$('a[rel=tooltip]').tooltip();
Моя разметка выглядит следующим образом:
<a rel="tooltip" title="Not implemented" class="btn"><i class="icon-file"></i></a>
Это отлично работает, но я добавляю элементы <a>
динамически и всплывающие подсказки не отображаются для этих динамических элементов. Я знаю это, потому что я только связываю .tooltip() один раз, когда документ завершен, загружается с типичной функциональностью jquery $(document).ready(function()
.
Как связать это с динамически создаваемыми элементами? Обычно я делаю это с помощью метода jquery live(). Однако, какое событие я использую для привязки? Я просто не знаю, как подключить bootstrap.tooltip() с помощью jquery.live().
Я нашел один способ сделать эту работу примерно следующим:
/* Add new 'rows' when plus sign is clicked */
$("a.add").live('click', function () {
var clicked_li = $(this).parent('li');
var clone = clicked_li.clone();
clone.find(':input').each(function() {
$(this).val('');
});
clicked_li.after(clone);
$('a[rel=tooltip]').tooltip();
});
Это работает, но кажется хакерским. Я также вызываю ту же самую строку .tooltip() в вызове $(ready). Итак, выполняются ли элементы, которые существуют, когда страница сначала загружается и совпадает с этим селектором, с помощью всплывающей подсказки дважды?
Я не вижу никаких проблем с этим подходом. Я просто ищу лучшую практику или понимание поведения.
Попробуйте следующее:
$('body').tooltip({
selector: '[rel=tooltip]'
});
Если у вас есть несколько подсказок, которые вы хотите инициализировать, это хорошо работает для меня.
$("body").tooltip({
selector: '[data-toggle="tooltip"]'
});
Затем вы можете установить свойство для отдельных элементов с помощью атрибутов data
.
Для меня только захват события mouseenter был немного ошибкой, и всплывающая подсказка не отображалась/скрывалась должным образом. Мне пришлось написать это, и теперь он отлично работает:
$(document).on('mouseenter','[rel=tooltip]', function(){
$(this).tooltip('show');
});
$(document).on('mouseleave','[rel=tooltip]', function(){
$(this).tooltip('hide');
});
Я отправил более длинный ответ здесь: fooobar.com/questions/29389/...
TL; DR: вам нужна только одна строка кода, которая запускается в событии готовности документа:
$(document.body).tooltip({ selector: "[title]" });
Другой более сложный код, предложенный в других ответах, не кажется необходимым (я тестировал это с помощью Bootstrap 3.0).
Для меня этот js воспроизводит ту же проблему, что и при использовании Paola
Мое решение:
$(document.body).tooltip({selector: '[title]'})
.on('click mouseenter mouseleave','[title]', function(ev) {
$(this).tooltip('mouseenter' === ev.type? 'show': 'hide');
});
Я обнаружил, что сочетание этих ответов дало мне лучший результат - позволил мне по-прежнему позиционировать всплывающую подсказку и прикрепить ее к соответствующему контейнеру:
$('body').on('mouseenter', '[rel=tooltip]', function(){
var el = $(this);
if (el.data('tooltip') === undefined) {
el.tooltip({
placement: el.data("placement") || "top",
container: el.data("container") || false
});
}
el.tooltip('show');
});
$('body').on('mouseleave', '[rel=tooltip]', function(){
$(this).tooltip('hide');
});
Соответствующий HTML:
<button rel="tooltip" class="btn" data-placement="bottom" data-container=".some-parent" title="Show Tooltip">
<i class="icon-some-icon"></i>
</button>