質問

背景情報:
呼び出されたときにフォーム内に選択リストを作成し、それを取り込む関数があります。その後、スクリプトはリスト内のオプションを実行し、特定の値を探します。値がある場合、スクリプトはそのオプションを「選択」します。

問題:
リストは動的に作成され、時には非常に大きいため、ロードに時間がかかります。これが発生した場合、スクリプトの2番目の部分(オプションを選択する部分)は、選択リストにロードする時間がなかったため、何もしません。

ソリューションのアイデア:
いいのは、選択リストのonloadイベントで関数の2番目の部分を(別個の関数として)呼び出すことです。ただし、選択リストにはonload属性は含まれていません。もう1つのアイデアは、単に遅延を追加することですが、ある日、遅延が十分に長くない場合があります。

ご協力ありがとうございます

役に立ちましたか?

解決 4

さて、私はついに問題を修正しました。このソリューションは、ここで説明したものとは完全に異なっていました。基本的に、リストにオプションを追加するために「新しいオプション(値、テキスト)」を使用していました。最終的にifステートメントをスローし、必要な値に等しい値が使用されると、新しいOption(value、text、true)が使用されます。そしてそれは問題を解決しました。 1日の作業ですべて。

他のヒント

遅延の使用は信頼できません。選択リストに入力するために使用しているものはすべて、終了時に関数を直接呼び出す必要があります。

代替:

" onload"がないためあなたが本当にできるすべてを選択するためのイベントは、タイムアウト後に自分自身を呼び出す関数を持っています。選択リスト内のアイテムの長さがゼロから変更されている場合、何かが現在アイテム(開始点)を追加していることがわかります。開始点に到達し、次のタイムアウト後に何も変更されていない場合は、リストへのアイテムの追加が停止していると想定できるため、2番目の関数を実行できます。

AJAX呼び出しはどのようにしていますか?ほとんどのAJAXライブラリは、正常に完了したときにコールバックを実行するメカニズムを提供します。たとえばjQueryの場合:

$("#myList").load("ajax.url", function(){
   //your content has been loaded, so you can do your selection logic here
});

ajaxレスポンスを手動で処理する場合&リストをjavascriptで作成すると、リストがいつ終了するかを知っているコードが既にあるので、(zyemingが示唆したように)別の関数としてではなく、終了した後に選択部分を実行できます。

それが役に立たない場合は、いくつかのコードを投稿する価値があるので、人々はより具体的な答えを与えることができます。

オプションを選択する関数をコールバック関数にしないのはなぜですか。リストを作成する関数の最後に呼び出されます。例:

function createList(onComplete) {
// Create the list and maybe other tasks
onComplete();
}

注:このようなものではないかもしれませんが、あなたはアイデアを持っていると思います...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top