画面外ですべてのdom操作を実行してから、表示できるようにしようとしています。これは機能しますが、ブラウザーでレンダリングするときに最初の入力テキストに焦点を当てたいフォームでそれを実行しようとしている状況を除いて。
次のようなもの:問題は、フォームのレンダリングが完了する前にフォーカスが呼び出され、「コントロールが非表示、有効になっていない、またはフォーカスを受け入れないタイプであるため、コントロールにフォーカスを移動できません」というmyForm.prependTo(myDiv).show().find('input:first').focus();
エラーが発生することです。他の
Web 開発者は、要素を画面外で操作して可視化するという同様の状況にどのように対処していますか? jQueryに次のようなものがあればいいのに
myForm.prependTo(myDiv, function() { /* on render code here */ })
それを行う1つの方法はタイムアウトを設定することであり、それが起動したときに入力に焦点を当てることを知っていますが、それは物事を行うための最もクリーンな方法ではないように感じます. 私は iframe に onload イベントがあることを知っているので、人々が通常、非表示の iframe に要素を描画し、要素のレンダリングがいつ終了したかを知るためにその load イベントをリッスンするかどうかに興味がありますか? もしそうなら、これを行う例を教えてもらえますか?
2 に答える
myForm.prependTo(myDiv).show(function(e){
$(this).find('input:first').focus();
});
私は7年遅れていることを知っていますが、同様の問題があり、レンダリング後に必要なことを準備済みハンドラーに入れることで解決しました。
機能する復元機能がありましたが、要素が復元されたという視覚的なフィードバックがゼロまたはほぼゼロでした。
最初に要素を空にしてみました。それでも機能しましたが、視覚的なフィードバックはまだありませんでした。
$("#someSelector").empty();
restore();
次に、レンダリング後に ready() が発生することを発見しました。だから私はそれを次のように変更しました....
$("#someSelector").empty().ready(function() {
restore();
});
これで、restore() は empty() アクション RENDERS の後まで発生しません。これは、私の要素が空になってから再充填されるように見えることを意味します(常にそうでしたが、ユーザーはそれが起こるのを見ることができます)。
数日前に、覚えていない漠然とした検索で別の問題について、この解決策を見つけました。その後、再び必要になりましたが、何をしたかを正確に思い出せませんでした。今、私の検索には「jquery」と「render」という単語が含まれていて、ここにたどり着きました。
他の人がこの投稿に出くわし、実際にレンダリングが発生した後に何かを実行する必要がある場合に備えて、ここに投稿することをお勧めします。
乾杯。