Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript focus和focusout事件顺序从一个字段切换到另一个字段_Javascript_Jquery_Events - Fatal编程技术网

Javascript focus和focusout事件顺序从一个字段切换到另一个字段

Javascript focus和focusout事件顺序从一个字段切换到另一个字段,javascript,jquery,events,Javascript,Jquery,Events,假设我有两个文本字段,jQuery动态地将它们放在页面上。 我还在这些字段中添加了focus和focusout事件侦听器 因此,在页面上添加元素后,HTML如下所示: <div class="outer"> <input name="a" type="text" class="inner" /> <input name="b" type="text" class="inner" /> </div> $('.outer').on('

假设我有两个文本字段,jQuery动态地将它们放在页面上。
我还在这些字段中添加了
focus
focusout
事件侦听器

因此,在页面上添加元素后,HTML如下所示:

<div class="outer">
    <input name="a" type="text" class="inner" />
    <input name="b" type="text" class="inner" />
</div>
$('.outer').on('focus', '.inner', function (e) {
    // Some action
});

$('.outer').on('focusout', '.inner', function (e) {
    // Some action
});
因此,这些事件监听器被添加到具有class
internal
的两个文本字段中

当我将第一个文本字段置于焦点位置,然后紧接着将第二个字段置于焦点位置时,将触发的事件有:
focus
在第一个字段上,
focusout
也在第一个字段上,
focus
在第二个字段上

我的问题是,这些事件将按什么顺序触发

以下哪项是正确的,如果有的话

(它是同步的吗?)

A:First
focus
First字段激发,JavaScript等待它完成,而
focus
second字段激发,JavaScript等待它完成,而
focusout
First字段激发

B:First
focus
First字段上触发,JavaScript等待它完成,而
focusout
First字段上触发,JavaScript等待它完成,而
focus
second字段上触发

(或者它是异步的?)

C:First
focus
First字段上触发,JavaScript不会等待它完成,在second字段上触发
focus
后,JavaScript不会等待它完成,在第一个字段上触发
focusout
后立即启动

D:First
focus
First字段上触发,JavaScript不等待它完成,在First字段上触发
focusout
后,JavaScript不等待它完成,在
第二个字段上触发focus
后立即启动

很明显,第一个聚焦元素,在本例中是第一个文本字段,总是首先激发。
让我困惑的是,在第二个文本字段对焦后(不点击,只从第一个文本字段到第二个文本字段直接点击),
focus
(在第二个字段上)或
focusout
(在第一个字段上)首先触发哪个事件

当两个事件侦听器侦听具有相同类的两个元素时,它们是否同步激发(下一个事件仅在一个事件完成后激发)

或者它们是异步触发的


我真的需要一些JavaScript的内部知识。

当一个事件被触发时,它被推送到事件循环,并按触发顺序被触发

因为Javascript有一个单线程事件池,所以这些事件总是按照触发顺序一次触发一个


有关更多信息,请参阅:

是否已将console.log添加到事件中,并查看事件的触发顺序?我将这样做,但我不确定结果是否显示同步或异步行为。我的想法是,它也可能依赖于浏览器(只是我认为我不是专家)。因此,我在这里要求比我更了解JS内部结构的人给出明确的答案。事件循环本身是同步的,但事件可能是异步触发的(就像ajax readstate更改)。因此,在阅读了此处链接的文章和此处的答案以及关于我的问题的答案后,我的结论是B:是答案。我很抱歉,对吗?