在基于bootstrap 3.5的网站中,我们将在单击按钮时更改输入文本工具提示,并在三秒钟内删除工具提示。
<input type="text" id="sample" title="Tip">
<button name="change me" id="changeBtn">Change Tool Tip!</button>
//Initiall tooltip for all elements
$("[title!='']").tooltip();
$("#changeBtn").click(function () {
//Change tooltip text
$("#sample").attr('title', 'New Tip!').tooltip('fixTitle').tooltip('show');
//remove tooltipe after 3 sec
setTimeout(function () {
$(this).tooltip('destroy');
}, 3000)
})
问题是工具提示没有被破坏并继续显示。如果我将$(this).tooltip('destroy');
更改为$("[title!='']").tooltip('destroy');
它会起作用,但它不正确,因为它会删除所有其他工具提示。
任何评论?
答案 0 :(得分:7)
由于this
中setTimeout
的上下文发生了变化,请将this
的副本保存到新变量中并使用该变量:
$("#changeBtn").click(function () {
var _this = this;
setTimeout(function () {
$(_this).tooltip('destroy');
}, 3000)
})
scope and context here上有一些非常宝贵的信息。
答案 1 :(得分:1)
在setTimeout
中,this
不是您的工具提示,因此您必须先将其保存在变量中:
$("#changeBtn").click(function () {
// Save tooltip
var myTooltip = $("#sample").attr('title', 'New Tip!');
//Change tooltip text
myTooltip.tooltip('fixTitle').tooltip('show');
//remove tooltipe after 3 sec
setTimeout(function () {
myTooltip.tooltip('destroy');
}, 3000)
});
答案 2 :(得分:1)
试试这个
index = random.randrange(len(self.dataItem) - 1)
if self.dataItem[index] > self.dataItem[index + 1]:
return True
&#13;
//Initiall tooltip for all elements
$("[title!='']").tooltip();
$("#changeBtn").click(function() {
//Change tooltip text
$("#sample").attr('title', 'New Tip!').tooltip('fixTitle').tooltip('show');
//remove tooltipe after 3 sec
setTimeout(function() {
$("#sample").attr('title', 'New Tip!').tooltip('fixTitle').tooltip('hide');
}, 3000)
})
&#13;
@import url('http://getbootstrap.com/dist/css/bootstrap.css');
body {
margin: 30px;
}
&#13;
答案 3 :(得分:0)
查看我的修复程序。如您所见,问题在于使用此关键字:
$("[title!='']").tooltip();
$("#changeBtn").click(function () {
$("#sample").attr('title', 'New Tip!').tooltip('fixTitle').tooltip('show');
setTimeout(function () {
$("[title!='']").tooltip('destroy');
}, 3000)
})
答案 4 :(得分:0)
我认为使用thas更好:
$(function ()
{
let tooltipTarget = $('[data-toggle="tooltip"]');
$(tooltipTarget).tooltip({delay: { "show": 100, "hide": 300 }});
let timeoutHandler = null;
$(tooltipTarget).on('show.bs.tooltip', function () {
let that = this;
clearTimeout(timeoutHandler);
timeoutHandler = setTimeout(function () {
$(that).tooltip('hide');
}, 3000);
});
});