我尝试在 1 秒后调用 .hide()(使用 setTimeout),但它是直接执行的,为什么
I try to call .hide() after 1sec (using setTimeout), but it's executed directly, why?
我尝试在 1 秒后鼠标退出时隐藏子导航(.hover() 中的第二个函数),为此我使用 setTimeout。我需要 setTimeout 内部函数中的这个变量,所以我像这样尝试:
jQuery(".topnav > ul > li").hover(function() {
jQuery("ul.topnavsub").hide();
jQuery(this).find("ul.topnavsub").show();
}, function() {
var t = setTimeout((function(that){jQuery(that).find("ul.topnavsub").hide(); console.log(that);})(this), 1000);
});
这有效,但没有延迟。1. 为什么没有 1000 milisec deplay 和 2.我该怎么做才能正常工作?
如果我得到这个工作,我想补充一点:当在 1000milise 中输入子导航时,setTimeout 会停止,这样导航就不会被隐藏。这就是我所拥有的,但我无法测试它,导致孔设置超时的事情不起作用:
jQuery(".topnav > nav > ul > li").hover(function() {
jQuery("ul.topnavsub").off();
jQuery("ul.topnavsub").hide();
jQuery(this).find("ul.topnavsub").show();
}, function() {
var t = setTimeout((function(that){jQuery(that).find("ul.topnavsub").hide(); console.log(that);})(this), 1000);
jQuery(this).find("ul.topnavsub").on("mouseenter", function() {
clearTimeout(t);
jQuery(this).off();
});
});
匿名函数正在自行执行。
var t = setTimeout((function(that){
jQuery(that).find("ul.topnavsub").hide();
console.log(that);
})(this), //(this) is self executing
1000);
});
另类:
var that = this;
var t = setTimeout(function(){
jQuery(that).find("ul.topnavsub").hide();
console.log(that);
},1000);
复杂的方式:
var t = setTimeout((function(that){ return function(){
jQuery(that).find("ul.topnavsub").hide();
console.log(that);
}
})(this), 1000);
不太酷但仍然有效(可能更具可读性)的方式:
var that = this;
var t = setTimeout(function(){
jQuery(that).find("ul.topnavsub").hide();
console.log(that);
}, 1000);
这是因为您执行了一个函数并将undefined传递给setTimeout
var t = setTimeout((function(that){
jQuery(that).find("ul.topnavsub").hide();
console.log(that);
})(this), 1000);
只需从函数末尾删除(this)
var self = this;
var t = setTimeout(function(){
jQuery(self).find("ul.topnavsub").hide();
console.log(self);
}, 1000);
相关文章:
- 为什么onsubmit函数似乎没有执行
- 为什么自我执行匿名有效
- 为什么spyOn"停止函数“”的所有执行;Jasmine(要求澄清Jasmine 2.2间谍文件)
- 为什么AngularJS在每个摘要循环上都执行函数
- 为什么 .on() 方法不执行第一个处理程序
- 如果总是执行finally,为什么try会返回未更改的值
- 为什么在ASP.NET Ajax更新面板中执行任何操作后javascript元素都停止工作
- 为什么我在单个事件上执行多个
- 为什么 setTimeout(., 0) 不立即执行
- 为什么未执行的评估对某些浏览器中的行为有影响
- 为什么 body onload = javascript 函数连续执行
- 为什么通过javascript执行php可以工作
- 为什么这个正则表达式需要这么长时间才能执行
- 为什么控制器函数没有执行 Angular Js 1.5.5
- 为什么Javascript不按顺序执行代码
- 为什么javascript ES6 Promises在解析后继续执行
- 为什么用构造函数创建对象会执行对象's方法
- 为什么执行$q.when()时不传递promise/value
- 为什么执行函数不起作用
- 用静态值创建已经解析的Promise——为什么执行仍然是异步的