Javascript 为什么我的setTimeout函数忽略了这里的延迟?

Javascript 为什么我的setTimeout函数忽略了这里的延迟?,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,我正在使用和一个版本的Bootstrap,它允许人们使用(我试图使用较少的抽象,以便更好地理解JS) 不管怎样,我注意到第一次单击时延迟工作正常。但它周围的第二次立即开火; $('.copyButton')。工具提示({ 触发器:“单击”, 位置:'底部' }); 功能设置工具提示(btn,消息){ $(btn).工具提示(“隐藏”) .attr('data-original-title',消息) .工具提示(“显示”); } 功能hideTooltip(btn){ setTimeout(函数

我正在使用和一个版本的Bootstrap,它允许人们使用(我试图使用较少的抽象,以便更好地理解JS)

不管怎样,我注意到第一次单击时延迟工作正常。但它周围的第二次立即开火;

$('.copyButton')。工具提示({
触发器:“单击”,
位置:'底部'
});
功能设置工具提示(btn,消息){
$(btn).工具提示(“隐藏”)
.attr('data-original-title',消息)
.工具提示(“显示”);
}
功能hideTooltip(btn){
setTimeout(函数(){
$(btn).工具提示(“隐藏”);
}, 5000);
}
/*剪贴板.js*/
var clipboard=新剪贴板('.copyButton');
剪贴板上的('success',函数(e){
设置工具提示(如触发器“复制!”);
hideTooltip(如触发器);
e、 选举();
控制台日志(e);
});
剪贴板.on('error',函数(e){
设置工具提示(如触发器“失败!”);
hideTooltip(如触发器);
控制台日志(e);
});
/*防止默认打开按钮*/
var btns=document.querySelectorAll(“.style-guide”);
对于(变量i=0,l=btns.length;i
有人有什么见解吗?我检查过类似的帖子,但通常的问题是当有人立即执行函数时,而不是传递引用。就像下面的例子


setTimeout(foo(),5000)

清除选择功能的作用是什么?无论哪种方式,引导都为工具提示提供事件。所以我会更像这样处理

$(tooltipYoureShowing).on('shown.bs.tooltip', function(){
    //method to check if copy was a success

    removeTooltip($(this), 5000);

});

function removeTooltip(el, time){
    setTimeout(function(){
        el.tooltip('hide');
    }, time)

}
这样,您就有了一个实用方法来确定何时淡入淡出工具提示。我认为,如果您要为工具提示使用不同的UI,那么它将非常有用

注意:您可能需要将参数传递到settimout函数中

setTimeout(foo(), 5000);
将立即运行该函数

setTimeout(foo, 5000);
将在5秒后运行该功能

您应该将函数放入setTimeout中,而不是将setTimeout放入函数中,您可以更改setTooltiphideTooltip函数,以便它们:

function setTooltip(btn, message) {
    $(btn).attr('data-original-title', message);
    setTimeout(function() {
        $(btn).tooltip('show');
    }, 150);
}

var intervalId = null;
function hideTooltip(btn) {
    if (intervalId != null) {
        clearTimeout(intervalId);
    }
    intervalId = setTimeout(function() {
        $(btn).tooltip('hide');
        intervalId = null;
    }, 5000);
}
这里的兴趣点是:

  • 清除以前的hideTooltip超时(如果有)
  • 延迟一位$(btn)。工具提示('show')以呈现新的工具提示消息
片段:

$('.copyButton')。工具提示({
触发器:“单击”,
位置:'底部'
});
功能设置工具提示(btn,消息){
$(btn).attr('data-original-title',message);
setTimeout(函数(){
$(btn).工具提示(“显示”);
}, 150);
}
var intervalId=null;
功能hideTooltip(btn){
if(有效期内!=null){
clearTimeout(intervalId);
}
intervalId=setTimeout(函数(){
$(btn).工具提示(“隐藏”);
intervalId=null;
}, 5000);
}
/*剪贴板.js*/
var clipboard=新剪贴板('.copyButton');
剪贴板上的('success',函数(e){
设置工具提示(如触发器“复制!”);
hideTooltip(如触发器);
e、 选举();
});
剪贴板.on('error',函数(e){
设置工具提示(如触发器“失败!”);
hideTooltip(如触发器);
});
/*防止默认打开按钮*/
var btns=document.querySelectorAll(“.style-guide”);
对于(变量i=0,l=btns.length;i
。小猪{
背景#FFD3E0;
/*旧浏览器的回退*/
背景:-webkit线性梯度(向左,#FFD3E0,#fff);
/*Chrome 10-25,Safari 5.1-6*/
背景:线性梯度(向左,#FFD3E0,#fff);
/*W3C、IE 10+/Edge、Firefox 16+、Chrome 26+、Opera 12+、Safari 7+*/
}
前>跨度{
颜色:#c7177f;
字号:800;
}
属性值颜色{
颜色:#7c064c
}
#导航栏{
位置:相对位置;
左边距:自动;
右边距:自动;
}
#纳瓦尔{
左边缘:35%;
}
.导航条黑色{
背景:#000000;
}
.字形图标{
位置:相对位置;
顶部:1px;
显示:内联块;
字体系列:“字形图标半身人”;
字体风格:普通;
字体大小:正常;
字体颜色:#ffffff;
线高:1;
}
.td-60{
宽度:60%;
}
.td-30{
宽度:20%;
}
span.glyphicon.glyphicon-menu-right{
字号:1.5em;
填充:0 15px;
}
ul.nav.navbar-nav.navbar-center.how-things-work{
利润率:0px 15px;
}
@介质(最大宽度:1024px){
span.glyphicon.glyphicon-menu-right{
右边距:15px
}
}
@介质(最大宽度:768px){
span.glyphicon.glyphicon-menu-right{
右边距:0
}
}
/*剪贴板样式*/
/*删除水平滚动条的步骤*/
身体{
溢出x:隐藏;
}
/*自定义按钮*/
.btn信息{
颜色:#fff;
背景:#000;
边界半径:0px;
边界:0px;
边缘顶部:15px;
填充顶部:15px;
垫底:15px;
字体系列:“Helvetica Neue”,Helvetica,Arial,无衬线;
字体大小:16px;
字体风格:普通;
字体大小:粗体;
}
.btn信息:悬停{
背景:#ed008c!重要;
}
/*卡片*/
.卡片{
填充:3%;
宽度:自动;
高度:自动;
显示:内联块;
背景色:#fff;
边界半径:.25rem;
边框:1px实心rgba(0,0,0,125);
}
.卡img响应{
显示:块;
宽度:自动;
最大高度:100%;
}
.卡img容器{
显示:表格;
}
.卡img行{
身高:100%;
显示:表格行;
}
.卡垂直中心{
显示:表格单元格;
浮动:无;
垂直对齐:中间对齐;
}
/*引导覆盖*/
.tooltip.tooltip内部{背景颜色:#000000;颜色:#fff;}
.tooltip.top.tooltip箭头{边框顶部颜色:#000000;}

div class=“卡img行”>
div class=“col-xs-12 col-sm-6 col-md-6卡垂直中心”>
h1>
p>
p>
a>
/div class=“隐藏xs col-sm-6 col-md-6卡垂直中心”>
div>
/div>!--卡片-->
/div>!--卡img容器-->
复制






可能的dup
function setTooltip(btn, message) {
    $(btn).attr('data-original-title', message);
    setTimeout(function() {
        $(btn).tooltip('show');
    }, 150);
}

var intervalId = null;
function hideTooltip(btn) {
    if (intervalId != null) {
        clearTimeout(intervalId);
    }
    intervalId = setTimeout(function() {
        $(btn).tooltip('hide');
        intervalId = null;
    }, 5000);
}