我在一个锚元素上有一个工具提示,它在点击时发送一个 AJAX 请求。这个元素有一个工具提示(来自 Twitter Bootstrap)。我希望在 AJAX 请求成功返回时更改工具提示内容。启动后如何操作工具提示?
今天在阅读源代码时发现了这个。因此 $.tooltip(string)
调用 Tooltip
类中的任何函数。如果您查看 Tooltip.fixTitle
,它会获取 data-original-title
属性并用它替换标题值。
所以我们只需这样做:
$(element).tooltip('hide')
.attr('data-original-title', newValue)
.tooltip('fixTitle')
.tooltip('show');
果然,它更新了标题,这是工具提示中的值。
更短的方法:
$(element).attr('title', 'NEW_TITLE')
.tooltip('fixTitle')
.tooltip('show');
在 Bootstrap 3 中,调用 elt.attr('data-original-title', "Foo")
就足够了,因为 "data-original-title"
属性中的更改已经触发了工具提示显示中的更改。
更新:您可以添加 .tooltip('show') 以立即显示更改,您无需 mouseout 和 mouseover 目标即可查看标题中的更改
elt.attr('data-original-title', "Foo").tooltip('show');
.tooltip('show');
以使其在更新后显示
.attr('data-original-title', 'Foo')
周围的第二个参数中使用单引号时它不起作用?
这是 Bootstrap 4 的更新:
var title = "Foo";
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');
但最好的方法是这样做:
var title = "Foo";
elt.attr('title', title);
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');
或内联:
var title = "Foo";
elt.attr('title', title).attr('data-original-title', title).tooltip('update').tooltip('show');
从 UX 方面,您只是看到文本已更改,没有褪色或隐藏/显示效果,并且不需要 _fixTitle
。
您可以在不实际调用显示/隐藏的情况下更新工具提示文本:
$(myEl)
.attr('title', newTitle)
.tooltip('fixTitle')
.tooltip('setContent')
.tooltip('show')
,对我有用。
setContent
和 show
可以解决问题!您可以直接更改 data-original-title
而不是使用 fixTitle
对于引导程序 4:
$(element).attr("title", "Copied!").tooltip("_fixTitle").tooltip("show").attr("title", "Copy to clipboard").tooltip("_fixTitle");
如果您想在不关闭和重新打开工具提示的情况下更改文本,这是一个很好的解决方案。
$(element).attr('title', newTitle)
.tooltip('fixTitle')
.data('bs.tooltip')
.$tip.find('.tooltip-inner')
.text(newTitle)
这样,在不关闭工具提示的情况下替换文本(不会重新定位,但如果你正在做一个单词更改等应该没问题)。当您将鼠标悬停在工具提示上时,它仍然会更新。
**这是引导程序 3,对于 2,您可能必须更改数据/类名称
$tip
不是 $(element)
的属性
$(element).attr('title', newTitle).tooltip('fixTitle').parent().find('.tooltip .tooltip-inner').text(newTitle);
如果工具提示已被实例化(可能使用 javascript),则此方法有效:
$("#tooltip_id").data('tooltip').options.title="New_value!";
$("#tooltip_id").tooltip('hide').tooltip('show');
$('#tooltip_id').data('bs.tooltip').options.title = 'New_value!';
引导程序 4
$('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show')
https://getbootstrap.com/docs/4.1/components/tooltips/#tooltipdispose
$('#topic_1').tooltip({title: 'Hello'}).tooltip('show'); setTimeout(function() { $('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show'); }, 5000); #topic_1 { 边框:1px 纯红色;边距:50px; }
对于引导程序 3.x
这似乎是最干净的解决方案:
$(element)
.attr('data-original-title', 'New title').tooltip('show')
Show 用于立即更新标题,而不是等待工具提示被隐藏并再次显示。
您可以使用以下代码更改 data-original-title
:
$(element).attr('data-original-title', newValue);
以下对我来说效果最好,基本上我正在废弃任何现有的工具提示,而不是费心显示新的工具提示。如果像在其他答案中一样在工具提示上调用 show ,即使光标没有悬停在它上面,它也会弹出。
我选择这个解决方案的原因是其他解决方案,重新使用现有的工具提示,导致了一些奇怪的问题,当将光标悬停在元素上方时,工具提示有时不显示。
function updateTooltip(element, tooltip) {
if (element.data('tooltip') != null) {
element.tooltip('hide');
element.removeData('tooltip');
}
element.tooltip({
title: tooltip
});
}
data('bs.tooltip')
而不是 data('tooltip')
在引导程序 4 中,我只使用 $(el).tooltip('dispose');
然后正常重新创建。因此,您可以将 dispose 放在创建工具提示的函数之前,以确保它不会加倍。
必须检查状态和修改值似乎不太友好。
您可以使用函数在工具提示调用上设置内容
$("#myelement").tooltip({
"title": function() {
return "<h2>"+$("#tooltipcontainer").html()+"</h2>";
}
});
您不必只使用被调用元素的标题。
谢谢这段代码对我很有帮助,我发现它对我的项目很有效
$(element).attr('title', 'message').tooltip('fixTitle').tooltip('show');
销毁任何预先存在的工具提示,以便我们可以重新填充新的工具提示内容
$(element).tooltip("destroy");
$(element).tooltip({
title: message
});
我无法得到任何有效的答案,这是一个解决方法:
$('#'+$(element).attr('aria-describedby')+' .tooltip-inner').html(newTitle);
对于 BS4(和 BS3 有微小的变化).. 经过数小时的搜索和试验,我想出了解决这个问题的最可靠的解决方案,它甚至解决了同时打开多个(工具提示或弹出窗口)的问题,以及失去焦点后自动打开的问题等。
$('[data-toggle="tooltip"]').tooltip({ trigger: 'hover' }).on('shown.bs.tooltip', function() { var link = $(this); var data = ''; 数据 += '
我只在 bootstrap 4 中测试了这个并且没有调用 .show()
el.tooltip('hide').attr('data-original-title', 'message');
我使用 ajax 动态更改工具提示中的标题。
首先启用工具提示: $('[data-toggle="tooltip"]').tooltip()
然后改变title属性,然后重新初始化tooltip
$("#foo").attr('title','TheNewTitle'); $('[data-toggle="tooltip"]').tooltip('dispose'); $('[data-toggle="tooltip"]').tooltip()
Bootstrap 5 没有 fixTitle
或 _fixTitle
了,所以我不得不释放整个 Tooltip 对象并重建它:
$('a.copy').click(function() {
var tt = bootstrap.Tooltip.getInstance(this);
tt.dispose();
this.setAttribute('title', 'Copied!')
tt = bootstrap.Tooltip.getOrCreateInstance(this);
tt.show();
}
想要像引导文档一样更改工具提示内容/标题onclick。当您在那里复制代码示例时,您注意到了吗?我在这里使用 Bootstrap v5
...
<span id="tooltip" class="btn btn-outline-primary" data-bs-toggle="tooltip" data-bs-placement="top"
title="Tooltip content">Tooltip</span>
在进行下一步之前,请确保您已enabled Bootstrap5 工具提示
$('#tooltip').click(function() {
$(this).attr('data-original-title', 'Content changed!').tooltip('show');
$(this).attr('data-original-title', 'Tooltip content');
});
当您将鼠标悬停在此 span 元素上时,它将显示 Tooltip 内容。当您单击它时,这将更改为内容已更改!并将返回默认标题 Tooltip 内容。
我认为 Mehmet Duran 几乎是对的,但是在使用具有相同工具提示及其位置的多个类时存在一些问题。以下代码还避免了 js 错误检查是否有任何名为“tooltip_class”的类。希望这可以帮助。
if (jQuery(".tooltip_class")[0]){
jQuery('.tooltip_class')
.attr('title', 'New Title.')
.attr('data-placement', 'right')
.tooltip('fixTitle')
.tooltip('hide');
}
通过直接更改元素中的文本来更改文本。 (不更新工具提示位置)。
$('.tooltip-inner', $element.next()).html(newHtml);
$('.tooltip-inner', $element.next()).text(newText);
通过销毁旧的工具提示来更改文本,然后创建并显示一个新的。 (导致旧的淡出,新的淡入)
$element
.tooltip('destroy')
.tooltip({
// Repeat previous options.
title: newText,
})
.tooltip('show');
我正在使用 top 方法为“保存”设置动画。消息(使用  
,因此工具提示的大小不会改变)并将文本更改为“完成”。 (加上填充)请求完成时。
$element.tooltip({
placement: 'left',
title: 'Saving...',
trigger: 'manual',
}).tooltip('show');
var parent = $element.parent();
var interval_id = setInterval(function(){
var text = $('.tooltip-inner', parent).html();
switch(text) {
case 'Saving. ': text = 'Saving.. '; break;
case 'Saving.. ': text = 'Saving...'; break;
case 'Saving...': text = 'Saving. '; break;
}
$('.tooltip-inner', parent).html(text);
}, 250);
send_request( function(){
// When the request is complete
clearInterval(interval_id);
$('.tooltip-inner', parent).html('Done. ');
setTimeout(function() {
$element.tooltip('hide');
}, 1500 /* Show "Done." for a bit */);
});
这对我有用:(bootstrap 3.3.6; jquery=1.11.3)
<a id="alertTooltip" href="#" data-html="true" class="tooltip" data-toggle="tooltip" title="Tooltip message"></a>
<script>
$('#alertTooltip').attr('title', "Tooltip new <br /> message").tooltip('fixTitle');
</script>
属性 data-html="true"
允许在工具提示标题上使用 html。
使用 Tooltip 对象 Boostrap :
$(element).attr('data-original-title', 'New value');
$(element).data('bs.tooltip').tip().find('.tooltip-inner').text('New value');
如果您在 HTML 中设置了 title 属性,则在单击图标或按钮时使用 $(this).attr('title',newValue);
当ajax请求成功返回时,您可以使用此代码隐藏工具提示更改其标题并再次显示工具提示。
$(element).tooltip('hide');
$(element).attr('title','this is new title');
$(element).tooltip('fixTitle');
setTimeout(function() { $(element).tooltip('show');}, 500);
我正在使用这种简单的方法:
$(document).ready(function() { $("#btn").prop('title', '点击复制你的shorturl'); });函数 myFunction(){ $(btn).tooltip('hide'); $(btn).attr('data-original-title', 'Test'); $(btn).tooltip('show'); });
$(this).attr('data-original-title', 'click here to publish')
.tooltip('fixTitle')
.tooltip('show');
如果您需要在使用 attr 'data-original-title' 进行初始化后更改工具提示的文本,则很有用。
$(element).attr('data-original-title', newValue).tooltip('show');
对我来说是最简单的工作解决方案。