2

问题是,当专注于一个时,我尝试 通过运行#input1来专注于它#input2

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

首先运行然后的focusin事件#input2focusout#input1

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

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

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

4

2 回答 2

1

有一种叫做Event Hierarchy的东西。它决定事件的触​​发顺序。

如果您的案例需要先触发另一个,请务必记下这一点。

有关更多信息,请参阅此问题

于 2012-07-12T20:21:12.290 回答
1

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

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

})();

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

于 2012-07-12T20:21:17.240 回答