これを行うための適切な方法/設計はありますか? それとも、それらを 1 つの関数/イベントに結合し、Ajax から返された値に基づく必要がありますか?
私はそのような2つの変更イベント/機能を持つドロップダウンリストを持っています,
$(document).ready(function () {
$("#ddlFacilityDatabases").change(UpdateCategoriesList).change(UpdateReportsList);
}
どちらの関数も、「#ddlCategories」と「#ddlReports」のオプションを変更します。UpdateCategoriesList() は「#ddlCategories」オプションを変更し、UpdateReportsList() は「#ddlReports」オプションを変更します。
これが私の関数の1つです(ほとんど同一であるため、1つだけを投稿し、場所と名前をいくつか変更するだけです)
function UpdateCategoriesList() {
// Disable the Dropdown.
$("#ddlCategories").attr("disabled", true);
// Get Selection Value.
var Selection = {
"FacilityDatabaseName": $("#ddlFacilityDatabases").val()
};
// Send JSON to /Select/getCategories/.
$.ajax({
url: "/Select/getCategories/",
type: "GET",
dataType: "html",
data: Selection,
success: function (response, textStatus, jqXHR) {
// Parse Array.
var Categories = JSON.parse(response).categories;
// Clear Categories DropDownList.
$("#ddlCategories").children("option").each(function () {
if ($(this).val() != "") {
$(this).remove();
}
});
// Add New Categories.
var length = Categories.length;
for (var i = 0; i < length; i++) {
if (Categories[i] != null || Categories[i] != "") {
$("#ddlCategories").append("<option value=\"" + Categories[i] + "\">" + Categories[i] + "</option>");
}
}
},
complete: function () {
// re-enable dropdownlist
$("#ddlCategories").attr("disabled", false);
}
});
}
問題は、上記のように両方をイベントハンドラーに追加すると実行されますが、両方の関数が実行された後にページがドロップダウンリストを更新することです。2番目は最初の変更に依存しているため、最初のページを更新してから2番目のページを更新する必要があります。