私の目標は、同じコンポーネントが常にフォーカスを持っていることを確認することです。フォームには、1つの入力ボックスといくつかのボタンがあります。ユーザーはバーコードをスキャンし(キーボードをエミュレートするスキャナーで)、ボタンを選択して機能をアクティブにします。入力ボックスをクリックしなくても、複数のバーコードをスキャンできるようにしたいと思います。受信トレイを上書きする準備をするという汚い作業を行う次のJavaScriptがあります(現在、フォーカスを受信トレイに移動した場合のみ)。
function SelectAll(id)
{
document.getElementById(id).focus();
document.getElementById(id).select();
}
window.onload = SelectAll('form:scan');
入力が妨げられないようにする必要があります(したがって、フォーカスが失われた場合にのみフォーカスを戻す必要があると考えています)。変更とボタンのアクティブ化イベントにフォーカスする機能を追加しようとしましたが、成功しませんでした。ボタンをアクティブにした後、フォーカスがどこか不明になるため、実際にはページ幅を広くする必要があります。
編集
この場合、ぼかしイベントでフォーカスを変更しても機能しないようです。JSFのハンドラーは、blurイベント(したがってフォーカス変更要求)が実行された後にフォーカスを移動するように見えます。JSFの専門家は、純粋なJavaScriptを使用する代わりに、JSFのハンドラーを調べて微調整する方法を知っていますか?
編集
私は途中です。ぼかしイベントが無視された理由は、AJAX呼び出し中に個々のコンポーネントだけでなく、フォーム全体が再レンダリングされることに関係していました。更新範囲を制限すると、入力ボックス自体を除くすべてのコンポーネントで機能します。入力に対していくつかの検証を行うため、入力ボックス自体を再レンダリングする必要があります。再レンダリングを無効にすると、入力時に選択されます。再レンダリングを有効にすると、検証された情報が戻される前に選択コードが実行されます。情報が戻されると、選択が失われます(フォーカスは維持されますが、選択が適切に行われていないと、すぐに再度スキャンすることはできません。どこかをクリックします)。