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

时间:2012-07-12 19:46:09

标签: javascript jquery

问题在于,如果关注一个#input1,我会尝试将重点放在#input2上 通过运行

$('#input2').focus();

首先运行focusin #input2事件,然后focusout的{​​{1}}

为什么会发生这种情况,为什么不#input1先运行?

请参阅示例http://jsfiddle.net/zZZsD/3/ 输入第一个输入4个符号

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

2 个答案:

答案 0 :(得分:1)

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

如果您的案件要求在另一个案件之前开火,请务必记下这一点。

有关详情,请参阅此question

答案 1 :(得分:1)

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

(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>');
    });

})();

当你选择另一个元素并对它们进行疏散时,导航器可能会检查聚焦元素。