私は Salesforce (visualforce) を使用しており、カスタムのオートコンプリート Javascript を使用しています。element2
私の要件は、別のテキストフィールドの提案から選択が行われるとすぐに、テキストフィールドでオートコンプリート検索をトリガーすることelement1
です。
キーボードを使用して自動提案リストをスクロールできるようにする必要があるため、特定のフィールドにフォーカスする必要があります。現在element2.focus()
、 で選択が行われた直後に を実行してelement1
おり、 で自動提案検索をトリガーしていelement2
ます。
また、これらのフィールドでは、検索の実行中にユーザーがフィールドに手動でフォーカスすると、自動提案が折りたたまれます。これは、検索がキャンセルされたことを示しています。このため、検索をトリガーしてから呼び出すことができませんelement2.focus()
さまざまなブラウザーで発生していることは次のとおりです。
Chrome/Firefox 3.5、4/Safari 5.0.3:
- 下の候補からオプションを選択します
element1
- フィールドの値の変更
- 提案の崩壊
- フィールドがぼやけていますが、焦点がどこにあるのかわかりません。おそらく
window
IE8:
- 下の候補からオプションを選択します
element1
- フィールドの値の変更
- 提案の崩壊
- フィールドがぼやけて
element2
焦点が合う - このフィールドの検索が起動します
また、上記の動作の違いは、マウス クリックを使用して選択している場合のみです。キーストローク (上/下から Enter) を使用すると、これはすべてのブラウザーで期待どおりに機能します。マウスとキーボードの両方の選択で、同じ JavaScript メソッドのセットが実行されます。
これに対して私が見つけた興味深い「修正」はelement2.focus()
、たとえば、 を使用して 100 ミリ秒後に呼び出すことsetTimeout()
です。element1
これはの onblur が混乱しているためだと推測してelement2.focus()
いますが、これを使用して本当に満足していません。
さて、何かアイデアはありますか?
コード サンプル:
//mouseclick handler
function handleMouseClick(event){
element1.value = (event.target)?event.target.textContent:event.srcElement.innerText;
callback();
// kills the children and hides the div containing the suggestions
hideAutoComplete();
}
function callback() {
element2.value = '';
element2.focus();
}