在下面的代码中,我想在提及var hasFocus=False;
和<textarea>
模糊500毫秒后设置<input>
。此代码立即转为hasFocus=False
,而不是第一次等待500毫秒。之后,它按预期工作
我无法理解为什么它第一次没有按预期运行!
$(function(){
var hasFocus=false;
$("textarea[name='question1'], input[name^=q1_option]").blur(function(event){
setTimeout(function(){
hasFocus=false;
},500);
}).focus(function(){
hasFocus=true;
});
$(document).on('click',function(e){
console.log("focus :" +hasFocus);
if(hasFocus)
{
alert("Working!!"); //Now this does not come up for the first time!
}
})
});
答案 0 :(得分:1)
那是因为你的console.log
在触发超时模糊事件之前执行,因此控制台会显示之前的值。移动console.log("focus :" +hasFocus);
和blur
功能中的focus
以查看一切正常。
演示 - Fiddle
答案 1 :(得分:1)
经过大量的轰动,我想出了这个。它不是我的确切代码,而是一个演示,它完全按照我想要的方式工作:
$(function(){
var hasFocus=false;
$("textarea[name='question1'], input[name^=q1_option]").blur(function(event){
setTimeout(function(){
hasFocus=false;
},500);
}).focus(function(){
setTimeout(function(){ //just initiated focus event after blur event
hasFocus=true; //just initiated focus event after blur event
},510); //just initiated focus event after blur event
});
$(document).on('click',function(e){
console.log("focus :" +hasFocus);
if(hasFocus)
{
alert("Working!!"); //Now this does not come up for the first time!
}
})
});
答案 2 :(得分:0)
setTimeout(function(){
hasFocus=false;
},500, function() {hasFocus=true;});
只需添加:f unction(){hasFocus = true;} 到setTimeout函数的末尾。或者创建一个将hasFocus变量设置为true的函数,并在完成setTimeout函数时调用此函数。
您可以在那里阅读有关setTimeout函数的更多信息:http://www.sitepoint.com/jquery-settimeout-function-examples/
编辑:哦,如果这种方法不起作用,那么尼古拉是对的! :)