入力フィールドを DOM に追加し、IE でフォーカスする
-
01-07-2019 - |
質問
クリックすると入力ボックスに変わり、フォーカスされる div を作成しようとしています。これを実現するためにプロトタイプを使用しています。これは Chrome と Firefox の両方で機能しますが、IE では機能しません。1 秒のタイムアウトを設定しても、IE は新しく追加された入力フィールドにフォーカスすることを拒否します。
基本的にコードは次のように動作します。
var viewElement = new Element("div").update("text");
var editElement = new Element("input", {"type":"text"});
root.update(viewElement);
// pseudo shortcut for the sake of information:
viewElementOnClick = function(event) {
root.update(editElement);
editElement.focus();
}
上記の例は実際のコードの短縮バージョンであり、IE のフォーカス ビットを除いて実際のコードは正常に動作します。
IEのフォーカス機能に制限はありますか?入力をフォームに入力する必要がありますか?
解決
私の推測では、focus() を呼び出した時点では、IE はまだ DOM を更新していないと思います。ブラウザーは、DOM を更新する前に、スクリプトの実行が完了するまで待機することがあります。
アップデートを実行してから、
setTimeout("setFocus", 0);
function setFocus()
{
editElement.focus();
}
他のオプションは、両方の項目を常に DOM に存在させ、特定の時点で何を非表示/表示する必要があるかに応じて、それらの style.display を交換することです。
他のヒント
IEのバージョンは何ですか?DocType は何に設定されていますか?それは厳密モードですか、標準モードですか、それとも癖モードですか?JavaScript エラーが表示されていますか (ステータス バーの左下に小さな黄色の警告サインが表示されていることを確認してください)?[ツール] > [オプション] > [詳細設定] で、すべてのエラーのエラー通知を有効にします。
オイシン
質問にはすでに回答されています 17/26. 。ただ指摘しておきたいのは、プロトタイプにはこのためのネイティブ メカニズムがあるということです。 Function.defer()