2009-06-17 18 views
0

背景情報:
フォームの中で選択リストを作成してそれを作成する機能があります。その後、スクリプトはリスト内のオプションを実行し、特定の値を探します。値がある場合、スクリプトはそのオプションを '選択'します。

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

アイデア:
いいだろう、何が選択リストのためのonloadイベントで(別の関数としての)関数の第二部を呼び出すことです。しかし、選択リストはonload属性を持つことは想定されていません。もう1つのアイデアは単に遅延を追加することですが、ある日遅延が十分に長くない可能性があります。遅延を使用して任意の助けを事前に

おかげJavascript:スクリプトがロードする要素を待つ必要があります

+0

コンテンツをサーバーから動的にロードしているのですか、またはJavaScriptを使用してクライアント側でプログラムによって生成されていますか。それを少し明確にしてください。 – SingleNegationElimination

+0

リストは、AJAXとのサーバから動的に取り込まれます。私がする必要があるのは、リストにデータが入るのを待つことですが、遅延を追加することはうまくいかず、リスナーを追加することはできません。 – VinkoCM

答えて

0

私はついにこの問題を修正しました。このソリューションは、ここで説明したものとはまったく異なりました。基本的には、新しいオプション(値、テキスト)を使ってリストにオプションを追加していました。私はif文を投げつけてしまい、必要なものと等しい値が新しいOption(value、text、true)に使われると終了しました。それが問題を解決しました。今日の仕事すべて。

1

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

ない「のonload」イベントは、あなたが本当にそれを行うことができ、すべてがタイムアウト後に自分自身を呼び出す関数を持って選択するためにはありませんので。選択リスト内の項目の長さがゼロから変更されている場合、現在項目(開始点)を追加していることが分かります。開始点に達して、次のタイムアウト後に何も変更されていない場合は、リストに項目が追加されなくなったとみなして、2番目の機能を実行できます。

+0

1.タイムアウトを設定する 2.すべてのアイテムがロードされたかどうかをチェックするtime outが発生したときに関数を呼び出す。 3.すべてがロードされている場合は、機能2を実行してオプションを選択し、タイムアウトを設定して繰り返します。 これはこの意味ですか? – VinkoCM

+0

はい。リストの長さが変わっても、すべてのアイテムがロードされたことがわかります。 –

0

オプションをコールバック関数を選択する関数を作成してみませんか?リストを作成する関数の最後に呼び出されます。例えば。

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

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

+0

さて、リストが作成された直後に、残りのスクリプトが必要なオプションを選択します。問題は、ブラウザーでリストをロードするのに時間がかかることです。だから私はリストが読み込まれるのを待たなければならない。そういうわけで、onloadイベントが不思議になるのですが、サポートされていません。 – VinkoCM

1

はどのようにあなたのAJAX呼び出しをやっていますか?ほとんどのAJAXライブラリは、正常終了時にコールバックを行うメカニズムを提供します。 jQueryのでたとえば:あなたはJavaScriptであなたのリストを構築し、手動で&をAJAXの応答を処理している場合は、あなただけの選択を行うことができますので、

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

、あなたはすでに、リストが終了したときに知っているコードを持っていますもう一度、別の機能としてではなく終了しました(zyemingが示唆したように)。

あなたが役に立たない場合は、人々があなたにさらに具体的な回答を与えることができるように、コードを投稿する価値があります。

+0

それがうまくいくかどうかわかりません。私は明らかに、リストが完全に埋められた時を知っている。私の問題は、リストがブラウザに読み込まれるまでに時間がかかることです。私が 'アラート(' AAAAAA ');オプションを選択するスクリプトの部分の前に、「OK」をクリックするのに時間がかかるので、リストがロードされるので問題はありません。リストをロードするのではなく、リストを作成するのを待つ必要はありません。 – VinkoCM

+0

javascriptを使用してDOMにコンテンツを追加すると同期が取れます(つまり、リストを作成するときに、ブラウザがロードするのを待つ必要はありません、あなたのajax呼び出しが完了したと仮定して)...あなたがしようとしているようなサウンドあなたの選択ロジックは、実際に完了するのではなく(例えば、コールバックで)、ajaxコール(非同期)を作成した直後に実行されます。どちらか、または私はあなたのAjaxの負荷をどのようにしているかを十分に理解していません。私が言ったように、いくつかのコード(ちょうどあなたがやっていることを強調するバージョンをカット)は、多くの助けとなるでしょう。 – Alconja

関連する問題