私は4つの選択肢があります。 Javascriptを使用して、これらの選択項目内に表示するオプションを決定します。選択オプションが選択されている場合は、変更イベントをトリガして、追加の選択オプションを自動入力します。正確に何が起こっているのかを説明するのはかなり難しいので、私はJSFiddleを設定しました。私は3つの選択肢を使ってここで少しデモンストレーションを行っただけです。変更イベント内で今Ajaxを1回だけ呼び出します。
var getSelectedYear = function() {
return $("#year option:selected").val();
};
var getSelectedProduct = function() {
return $("#product option:selected").val();
};
$('#year').change(function() {
$("#year").css('border-color', '#ccc');
$("#product option").addClass("hide");
$("#product option.year-" + getSelectedYear()).removeClass('hide');
$("#product").removeClass('hide');
var first_val = $("#product option:not('.hide')").first().val();
$("#product").val(first_val);
$("#product").trigger("change");
triggerImageChange();
});
$('#product').change(function() {
$("#type option").addClass("hide");
$("#type option.year-" + getSelectedYear() + ".product-" + getSelectedProduct()).removeClass('hide');
$("#type").removeClass('hide');
var first_val = $("#type option:not('.hide')").first().val();
$("#type").val(first_val);
$("#type").trigger("change");
triggerImageChange();
});
var triggerImageChange = function() {
$.ajax({
type: "get",
url: "./"
}).done(function(data){
});
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="form-group">
<label>Year</label>
<select class="form-control" id="year">
<option value=""></option>
<option value="2016">2016</option>
</select>
</div>
<div class="form-group productGroup">
<label>Product</label>
<select class="form-control hide" id="product">
<option value=""></option>
<option value="Option1" class="year-2016 hide">Option1</option>
<option value="Option2" class="year-2016 hide">Option2</option>
</select>
</div>
<div class="form-group productGroup">
<label>Type</label>
<select class="form-control hide" id="type">
<option value=""></option>
<option value="Option1" class="year-2016 product-Option1 hide">Option1</option>
<option value="Option2" class="year-2016 product-Option1 hide">Option2</option>
</select>
</div>
、私はまた、Ajaxの呼び出しを行います。これは、
によって開始されます。triggerImageChange();
私はこの機能をフィディド内に組み込みました。私の問題はこれです。私は、追加の選択肢をあらかじめ準備するためにchangeイベントをトリガする必要があります。ただし、このイベントにより、ajax呼び出しが複数回起動されます。これはコンソールで見ることができます。したがって、yearを選択すると、triggerImageChangeが2回呼び出されているため、フィディングは2つのajax呼び出しを行います。 4つの選択肢があるとき、それは4つのajax呼び出しを行います。
これを防ぐ方法はありますか?
$('#year').change(function() {
// other code
$("#product").trigger("change");
triggerImageChange();
});
は、その後、あなたが持っている#product
ためchange
ハンドラで:
$('#product').change(function() {
// other code
$("#type").trigger("change");
triggerImageChange();
});
triggerImageChange
機能はAJAX要求を行う
おかげで、あなたの変更ハンドラで
ajax呼び出しがすでに完了していることを示すためにセンチネル変数を使用できないため、再度実行しないでください。 –