javascript - setTimeout 仅在导致它的事件的第一次不工作

标签 javascript jquery settimeout blur

在下面的代码中,我想设置 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!
        } 
    })
});

最佳答案

那是因为您的 console.log 在触发超时模糊事件之前执行,因此控制台显示之前的值。将 console.log("focus :"+hasFocus); 移动到您的 blurfocus 函数中,以查看一切正常。

演示 - Fiddle

关于javascript - setTimeout 仅在导致它的事件的第一次不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145309/

相关文章:

javascript - jquery ui 对话框按钮

javascript - CKEditor + 插件链接选择框

jquery - jQuery 库如何使用 $ 代替 "JQuery"来引用对象?

jquery - 在 .on() 函数处理程序中获取事件冒泡到的元素的直接方法

javascript - 为什么 javascript setTimeout 会同时执行所有操作?

javascript - 将参数传递给 setTimeout?

javascript - 如何重置按钮中的 setTimeout 函数以便它可以再次运行

javascript - 使用 ajax 调用中的数据 knockout 更新可观察数组的每个元素的属性

javascript - 按键值过滤对象

javascript - 如何在 Ramda 中的对象属性之间移动值?