1

PHP、jQuery、Spry の組み合わせを使用して、ユーザーが最初に車両の種類、次にメーカー、モデル、最後に特定のモデルを選択する一連のリストボックスを提供しています。

リストボックス (SELECT) はすべて正常に動作しており、Spry 要素を使用して適切に更新されます。各リストボックスは、異なる Spry XML データセットから取り込まれます。これが私の問題です。

4 つのリストボックスすべてをユーザーに表示すると、スクリプトは 4 つのリストボックスすべてにデータを入力するために 4 つの XML のすべてをフェッチしなければならず、数秒かかります。私がやりたいことは、リストボックスを順番に作成/有効にすることです。ユーザーが最初のリストボックスから選択すると、2番目が作成/有効になり、2番目から選択すると、3番目が作成/有効になります...などの上。

無効化された属性を設定するのは良くありません。これは、スクリプトが XML を処理する前に既に取得しているためです。

何か案は??

更新 - 申し訳ありませんが、私の問題を明確にしたとは思わないでください。

スクリプトの先頭で 4 つの Spry XML データ セット変数を宣言します。それぞれの変数は (必要に応じて) 起動し、サービスに対して複雑な SOAP クエリを実行します。このサービスは、XML のチャンクを返します。各クエリは最後のクエリに依存するため、ユーザーが車両のタイプを選択すると、2 番目のデータ セットが更新され、メーカーの正確なリストが表示されます。メーカーを選択すると、3 番目のリストが更新され、そのメーカーのモデルの正確なリストが表示されます。モデルを選択すると、そのモデルの派生モデルのリストが更新されます (4 番目のリスト)。

スクリプトのさらに下には 4 つの SELECT があり、それぞれに spry クエリからのデータが取り込まれています。ここで、ユーザーは、最終ボックスで適切なモデルを取得するために、各リストから順番に目的のオプションを選択する必要があります。私がやりたいことは、ページが生成されたときに最初のボックスにのみ入力し、ユーザーがそれぞれで目的の値を選択したときに、2 番目、3 番目、4 番目のボックスに入力 (または作成??) することです。 www.autotrader.co.uk)。

最初の投稿で述べたように、「disabled」属性、または jQuery の show() および hide() 関数を使用することはできません。これらの関数は、4 つのデータセットすべてがフェッチされて SELECT に入力されるまで起動しないためです。 . 最初に取得される4つのXMLロットを停止するために、必要に応じて要素をゼロから理想的に作成するものが必要です...

これが明確になることを願っています

4

3 に答える 3

0
$('option').click( function() {
    if($(this).val() != 'Select one...'){
        $(this).next('select').attr('enabled', 'enabled');
        $(this).next('select ~ select').attr('disabled', 'disabled');

        /* or */
        $(this).after('<!-- Generated select/option HTML -->').nextAll('select').remove();
    }
}

これは完全にテストされていませんが、API によると動作する可能性があります。あなたの質問を完全に理解しているかどうかはわかりませんが、選択後に次のオプションを有効にし、その後次のオプションがクリックされるまでオプションを無効にしたい場合は、これがチケットになります.

それらを動的に追加 (または削除) することが問題である場合は、.afterおよび.nextAllメソッドを使用して、削除する選択ボックスを追加および特定することができます。

更新: おっと。間違ったセレクターがありました。

于 2010-04-26T14:50:23.583 に答える
0

あなたが何を求めているのかわかりませんが、次のようなものを探しているようです:

$("#select1").bind("change",function() {
    var sel=$(this).attr("value");
    $.ajax({
        url:sel + ".xml",
        dataType:"xml",
        success:function(xml) {
            $(xml).children("option").each(function() {
                $("<option />",attr:{ value:$(this).attr("value") }).text($(this).text()).appendTo("#select2");
            });
        }
    });
});

私はここで基地から離れていますか?つまり、これは初歩的な方法にすぎません (そして、おそらく 10 億の穴があります) が、この更新をライブで行いたいと思いますよね? ページの読み込み時にすべての XML を取得する必要はありませんよね? に変更$("#select1")して、XML を取得した後に を$("#formname select").each(function() {選択して追加することもできます。.next("select")

正直に言うと、Spry を実際に使用したことはありません。私はそれが少し使用されているのを見てきました.jQueryを使用して必要なことを行うことができるように思えました.

于 2010-04-26T14:56:44.493 に答える
0

それらを無効にする代わりに、jQuery を使用して非表示/表示しないのはなぜですか? .hide() .show()

于 2010-04-26T14:33:28.010 に答える