0

入力要素からぼかしイベントがトリガーされるたびに、特定の 1 つの要素にフォーカスを設定したいと考えています。

この問題は、blurイベントをトリガーする同じ要素に注目しようとすると発生します。

フォーカスしようとしている要素がイベントをトリガーしていない場合にのみ、これが機能するのはなぜですか?

[Issue Illustration] と fiddle による説明:

  • 私が注目しようとしている要素はcol0
  • ぼかしイベントをトリガーする要素がない限り、col0完璧に機能します
  • ただし、ぼかしがcol0それ自体からトリガーされると、$("#col0").focus()機能しません。

Q:なぜですか? & 回避策/解決策は何ですか?

PS:動作の原因とそれを克服する方法を知りたいと思っています。使いやすさについての懸念は、問題ではありません

4

2 に答える 2

0

これは私にとってFFで機能します...

$('input').on('blur', function() {
    setTimeout(function () { $("#col0").focus(); }, 0);
});

アクションを少し延期するだけUIです (blur イベントの処理が終了した後)。

警告: jsfiddle FF では、試した後にコードを編集することはできません。入力に到達すると、更新するまでそこにとどまります。

更新: FF での実装の問題であるため (Chrome と IE は期待どおりに動作するため)、説明はトリッキーです。私の推測では、FF は、同じ要素のイベントハンドラーにいるときに関連イベントの発生を防止します (無限サイクルにつながる可能性があります)、 setTimeout を使用すると、ハンドラーを離れた直後にイベントが発生します (さらに、UI 自体が再描画される可能性もあります)。

于 2012-05-04T07:01:10.063 に答える
0

コントロール以外のすべてに集中しようとしているようです。これを試して:

$('input:not(#idofcontrol)').blur(function() {
    $('#idofcontrol').focus();
});
于 2012-11-07T18:45:53.410 に答える