美文网首页
js巧用setTimeout实现异步事件

js巧用setTimeout实现异步事件

作者: 咻咻咻i | 来源:发表于2017-07-14 17:18 被阅读0次

setTimeout()本身就是一个异步函数,通过借用它可以实现异步事件处理。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
    <title>异步事件</title>
</head>
<body>
    <div>
        <form action="">
            <input type="text"><br>
            <input type="text"><br>
            <input type="text">
        </form>
    </div>
    <script type="text/javascript">
            var input = $('input');
            input.blur(()=> {
                console.log(input.is(':focus'));
            });
    </script>
</body>
</html>

在不使用的情况下,当焦点想从一个input移动到另一个input时只会触发blur事件,控制台始终输出falseinput.is(':focus')无法正确获得新的焦点。使用setTimeout()后,在移动焦点这时候就可以正常获取新焦点,如下代码。

<script type="text/javascript">
        var input = $('input');
        input.blur(()=> {
            setTimeout(()=>{
                console.log(input.is(':focus'));
            }, 0);
        });
</script>

正常判断达到预期效果~~

半年后解释缘由:
js引擎是单线程的,如何实现的异步?每一个异步事件产生后它会放入事件队列等待处理。何时才会处理它,这是在主线程中的事件被处理完后才会从事件队列中逐个取出进行处理。
在本文操作中,失去焦点事件和点击事件都是同步事件,在执行产生一个失去焦点事件后,如第一段代码所写它会立即执行判断是否存在获取焦点这条语句,然后执行获取焦点语句。但在第二段代码中,由于js的异步原理,它会将这个判断语句放入事件队列中等待处理,然后执行获取焦点事件,在执行这个判断语句,这样就能成功判断到点击的焦点状态。

相关文章

  • js巧用setTimeout实现异步事件

    setTimeout()本身就是一个异步函数,通过借用它可以实现异步事件处理。 在不使用的情况下,当焦点想从一个i...

  • 16.3 JavaScript的执行机制

    浏览器事件轮询机制 js执行为单线程 网络请求、setTimeout、addEventListener属于异步事件...

  • js事件循环

    在js代码中,除了同步代码,就是异步代码,一个js文件是从上往下执行,遇到ajax,点击事件。settimeout...

  • JS运行机制

    JS异步任务分类: 1. setTimeout和setInterval2. DOM事件3. ES6中的Promis...

  • #Promise async/await总结

    1. JS中的异步操作哪些? 定时器settimeout 问:下面打印的结果是? 事件绑定addEventList...

  • JavaScript中的异步

    在工作当中,最常使用的js中的异步变成有一下几类: 回调函数最突出的例子为setTimeout ajax请求 事件...

  • this.setState是同步还是异步

    1、在组件的生命周期或者React合成事件中,是异步 2、在setTimeout或者原生dom事件中,是同步 异步...

  • JS异步那些事 一 (基础知识)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

  • JS异步那些事 三 (Promise)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

  • JS异步那些事 四(HTML 5 Web Workers)

    JS异步那些事 一 (基础知识)JS异步那些事 二 (分布式事件)JS异步那些事 三 (Promise)JS异步那...

网友评论

      本文标题:js巧用setTimeout实现异步事件

      本文链接:https://www.haomeiwen.com/subject/ockohxtx.html