0

私は 6 つの選択ボックス (sbs) を持っています。上位 3 つの sbs には、php を介して入力されるオプションのリストが含まれており、データは mysql から取得されます。各ボックスからオプションが選択されたら、jquery (ajax 経由) を使用して、そのすぐ下の sb のオプション項目を引き戻し、その sb に対応するデータを入力します。「作成」をクリックすると、データが ajax 経由で php スクリプトに送信され、データがテーブルに保存され、フォームの下のテーブルに送信されたドロップダウン データ (書式設定されていますが) が返されます。したがって、「組み合わせ」を作成すると、次のようになります。コロンの左側のすべては、選択ボックスの一番上の行のオプションであり、右側に表示されている下の対応するボックスからオプションを選択しています。

Color: Red    |   Capacity : 4GB    |      Model : ABC    |    EDIT
Color: Blue   |       Speed: 2GHZ   |   Capacity : 2GB    |    EDIT

レコードを編集したい場合は、編集をクリックすると、jquery がクリックされた編集ボタンの ID を見つけ、それを ajax 経由で別の php スクリプトに渡します。このスクリプトは、関連するデータを含む json オブジェクトを返します。これを使用して、ドロップダウン ボックスに選択したオプション。これまでのところ、すべて正常に動作しています。

私の問題はこれです。編集をクリックすると、sbs の一番上の行だけが選択されたオプションの 1 つを取得します。子オプションが選択されず、理由がわかりません。表示する適切なオプションを取得できますが、json オブジェクトで返された一致する値の選択状態を設定できません。私はそれを理解しようとして8時間過ごし、SOverflowや他のサイトでさまざまなことを試しましたが、どれもうまくいきませんでした.正直なところ、javascript/ajaxの経験はありません.

成功した ajax プロセス、つまり成功すると、次のことを行っています。

var jObj = $.parseJSON(html);

//parentVariations# is the select boxes in the top row where 
//Color, capacity, model options are displayed.
//The trigger fires off my ajax function which is responsible for 
//populating the corresponding child select box with relevant data.

$('#parentVariations1').val(jObj.groupAttr1).trigger('change'); 
$('#parentVariations2').val(jObj.groupAttr2).trigger('change'); 
$('#parentVariations3').val(jObj.groupAttr3).trigger('change'); 

//childVariations# is the child option box, i have the same code for each child
//box but am only showing the first one here for simplicitys sake.
//What I thought I was doing here is getting each option then if the value 
//matches that held in my corresponding json object set that option to selected...
//Doesn't work :'(
$("#childVariations1 option").each(function()
{
if($(this).val() == jObj.childAttr1)
{
      $("#childVariations1 option").attr('selected','selected');
}
});

それは私を限界に追いやったので、どんな助けも大歓迎です。

4

1 に答える 1

0

$("#childVariations1 option")すべてのオプションの配列です。どちらを指定する必要がありますか:

$("#childVariations1 option").eq(1).attr('selected','selected');

あなたの場合は、forループを使用し、使用する代わりにインデックスを使用して現在の位置を取得し.eachます。(またはカウンターを設置)

于 2011-08-26T19:30:15.400 に答える