2

問題は、1つにフォーカスがある場合 、実行#input1してフォーカスしようとすることです#input2

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

最初に のfocusinイベントを実行し、#input2次に のfocusoutを実行します#input1

なぜこれが起こるのか、なぜfocusout最初に実行されないのですか?

例については、 http://jsfiddle.net/zZZsD/3/を参照してください 。最初に 4 つの記号を入力します

更新:ところで、パフォーマンス上の理由から、直接の代わりに委任されたバインディングを使用しました。潜在的に多くの入力フィールドが存在します...

4

2 に答える 2

1

Event Hierarchyと呼ばれるものがあります。イベントが発生する順序を決定します。

ケースが別の前に起動する必要がある場合は、これを書き留めておくことが重要です。

詳細については、この質問を参照してください。

于 2012-07-12T20:21:12.290 に答える
1

おそらく、これは jQuery の内部メカニズム、または「さらに悪い」ブラウザの Javascript エンジンの内部メカニズムです。順序が重要な場合は、 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 に答える