2016-08-05 11 views
2

私は何かのやり方を理解しようとしていますが、説明するのはかなり難しいです。私は本質的に4つの動的選択入力を持っています。オプションが が選択されると、ajax呼び出しが発生します。これはどのように動作するのですか?私は適切に前のものが選択されるまで隠されているので、第二と第三の選択選択入力の独立した行

<select id="year" class="form-control"> 
    @foreach($fileData["data"] as $year => $countries) 
     <option value="{{ $year }}">{{ $year }}</option> 
    @endforeach 
</select> 

<select id="country" class="form-control hide"> 
    @foreach($fileData["data"] as $year => $countries) 
     @foreach ($countries as $country => $dishes) 
      <option class="year-{{ $year }} hide" value="{{ $country }}">{{ $country }}</option> 
     @endforeach 
    @endforeach 
</select> 

<select id="dish" class="form-control hide"> 
    @foreach($fileData["data"] as $year => $countries) 
     @foreach ($countries as $country => $dishes) 
      @foreach ($dishes as $dish => $images) 
       <option class="year-{{ $year }} country-{{ $country }} hide" value="{{ $dish }}">{{ $dish }}</option> 
      @endforeach 
     @endforeach 
    @endforeach 
</select> 

次私は、正しいデータを表示するには、次のデータセットに

array:4 [ 
    "data" => array:2 [ 
    2015 => array:2 [ 
     "english" => array:1 [ 
     "chips" => array:1 [ 
      0 => "img1.png" 
     ] 
     ] 
     "french" => array:1 [ 
     "mussles" => array:1 [ 
      0 => "img1.png" 
     ] 
     ] 
    ] 
    2016 => array:2 [ 
     "indian" => array:1 [ 
     "madras" => array:1 [ 
      0 => "img1.png" 
     ] 
     ] 
     "italien" => array:1 [ 
     "pasta" => array:1 [ 
      0 => "img1.png" 
     ] 
     ] 
    ] 
    ] 
] 

を持っています。私は最初の選択で2015を選択した場合 はJavaScript以内に私は

var getSelectedYear = function() { 
    return $("#year option:selected").val(); 
} 

var getSelectedCountry = function() { 
    return $("#country option:selected").val(); 
} 

$('#year').change(function() { 
    $("#country option.year-" + getSelectedYear()).removeClass('hide'); 
    $("#country").removeClass('hide'); 
}); 

$('#country').change(function() { 
    $("#dish option.year-" + getSelectedYear() + ".country-" + getSelectedCountry()).removeClass('hide'); 
    $("#dish").removeClass('hide'); 
}); 

$('#dish').change(function() { 
    triggerImageChange(); 
}); 

を行うので、第2の選択は、英語とフランス語を表示します。私が英語を選択すると、3番目の選択でチップが表示されます。私は最終的には選択に基づいて画像を表示し、これはAjax呼び出しによって行われます。

これはうまくいきます。左のメニューには比較リンクがあります。これをクリックすると、直前の選択を無効にする必要があります。

$('#comparison').click(function (event) { 
    event.preventDefault(); 

    $('#year, #country, #dish').prop('disabled', true); 
}); 

問題はこれです。私は今比較のために新しい選択行を表示する必要があります。理想的には、私はこのコードをすべて繰り返すことは望ましくない、それはあまりにも多くのコードでしょう。

ただし、この行の選択は、元の行とは独立して動作する必要があります。

これは可能でしょうか?私はあなたがコンテナのdiv要素で選択をラップするべきだと思い

おかげ

答えて

1

この要素では、IDを配置する必要があるため、選択からIDを削除し、特定のスタイルやデータセット要素のように区別するために別のものを使用するか、名前属性のみが問題ありません。

jQueryでは、すべての要素を見つけるためにdivコンテナを指します。

ボックスを3つ選択する必要があり、唯一の違いはコンテナIDになります。

関連する問題