Javascript Jquery焦点(in | out)以奇怪的顺序运行

Javascript Jquery焦点(in | out)以奇怪的顺序运行,javascript,jquery,Javascript,Jquery,问题是,当关注一个#input1时,我会尝试关注#input2 通过运行 $('#input2').focus(); 首先运行#input2的focusin事件,然后运行#input1的focusout 为什么会发生这种情况,为什么不先运行focusout 请看一个例子 首先输入4个符号 更新:顺便说一句,出于性能原因,我使用了委托绑定而不是直接绑定,可能会有很多输入字段…有一种称为事件层次结构的东西。它决定事件的触发顺序 如果你的案子需要先发一枪,记下这一点很重要 更多信息请参见此部分。这可

问题是,当关注一个
#input1
时,我会尝试关注
#input2
通过运行

$('#input2').focus();
首先运行
#input2的
focusin
事件,然后运行
#input1的
focusout

为什么会发生这种情况,为什么不先运行
focusout

请看一个例子 首先输入4个符号


更新:顺便说一句,出于性能原因,我使用了委托绑定而不是直接绑定,可能会有很多输入字段…

有一种称为事件层次结构的东西。它决定事件的触发顺序

如果你的案子需要先发一枪,记下这一点很重要


更多信息请参见此部分。

这可能是jQuery的内部机制,甚至是浏览器中Javascript引擎的“更糟”机制。如果顺序很重要,可以在对焦之前使用模糊方法

(函数(){
$('#cont')。关于('keyup','input',函数(事件){
var输入=$(此);
if(input.val().length==4){
input.blur();
$('#input2').focus();
}
});
$('#cont')。关于('focus','input',function(){
$(“#事件”).append(“+this.id+”
”)的focusin; }); $('#cont')。关于('blur','input',function(){ $('#events').append('focusout'+this.id+'
'); }); })();

当您选择另一个元素并取消聚焦时,导航器可能会检查聚焦的元素。

我看不出问题所在。当我在#input1中并点击#input2时,它会显示“focusout of input1,focusin of input2”,所以我不知道你的意思…你不应该点击#input2,点击#input1并键入4个符号来触发焦点()
(function () {
    $('#cont').on('keyup', 'input', function (event) {
        var input = $(this);
        if (input.val().length == 4) {
            input.blur();
            $('#input2').focus();
        }
    });

    $('#cont').on('focus', 'input', function () {
        $('#events').append('focusin of ' + this.id + ' <br>');
    });

    $('#cont').on('blur', 'input', function () {
        $('#events').append('focusout of ' + this.id + ' <br>');
    });

})();