Каскадные выпадающие списки, неоднократно населенные
У меня есть три уровня каскадного выпадающего
Заказчик> Проект> Задача
Когда я выбираю клиента, я просто хочу выбрать проекты клиентов
Когда я выбираю проект, я просто хочу выбрать задачи этого проекта
У меня есть проект> задача (уровень 2 до 3) работает нормально
Но когда я выбираю Customer, он заполняет Project OK, но затем повторно заполняет Task для каждого проекта. Таким образом, он выбирает правильные задачи, но если есть 3 проекта выше, он будет заполнять эти задачи 3 раза
Поэтому, когда я выбираю Заказчика А, он правильно заполняет Проект 1, 2, 3 и выбирает Проект 1 как заданный по умолчанию.
Но затем, предполагая, что у Проекта 1 есть Задача 1 и Задача 2, раскрывающийся список Задач заканчивается:
Задача 1 Задача 2 Задача 1 Задача 2
Я понимаю, почему это происходит, но я не знаю, как это остановить. Я думаю, что мне нужно, чтобы мой.append не вызвал событие изменения
Даже тогда это не имеет смысла, потому что все равно надо его очистить
Вот мой Javascript:
/*
This java script is for CREATE and EDIT popup dialogs on the Task Index page
- Manage cascading drop downs (Client > Project, Project > Task)
- Synchronise check box with hidden field
*/
$(document).ready(function () {
//When Customer is changed reload Project
// Project function reloads project tasks
$("#Customer_ID").change(
function () {
// refresh projects
refreshProjectFromClient();
}
)
// When project is changed reload task
$("#CustomerProject_ID").change(
function () {
refreshProjectTaskFromProject();
}
)
// When chargeable is changed sync the hidden field
// A change in a checkbox called MyCheckBox_CB
// will be reflected in a hidden field called MyCheckBox
$(":checkbox").change(
function () {
$("#" + this.name.replace("_CB", "")).val((this.checked ? 1 : 0));
}
)
})
// This is called when the customer combo changes
// It reloads the project combo with the customers active projects
function refreshProjectFromClient() {
// clear drop down
$("#CustomerProject_ID").empty();
// Get new project dataset via ajax based on customer and populate drop down
$.ajax({
type: 'POST',
//url: '@Url.Action("GetProjects")',
url: window.location.toString() + '/GetProjects',
dataType: 'json',
data: { CustomerID: $("#Customer_ID").val() },
// success is called when dataset returns
success: function (p) {
// Populate with each returned member
$.each(p, function (i, pr) {
// is this append triggering the task onchange?
$("#CustomerProject_ID").append(
'<option value="' + pr.Value + '">' +
pr.Text + '</option>'
)
// now that it's loaded, load the project tasks
refreshProjectTaskFromProject();
})
}
});
}
function refreshProjectTaskFromProject() {
$("#CustomerProjectTask_ID").empty();
// Get new tasks dataset via ajax based on project and populate drop down
$.ajax({
type: 'POST',
url: window.location.toString() + '/GetProjectTasks',
dataType: 'json',
data: { ProjectID: $("#CustomerProject_ID").val() },
// success is called when dataset returns
success: function (t) {
// Populate with each returned member
$.each(t, function (i, ta) {
$("#CustomerProjectTask_ID").append(
'<option value="' + ta.Value + '">' +
ta.Text + '</option>'
);
})
}
});
}
1 ответ
refreshProjectTaskFromProject() вызывается из с помощью $.each. Это должно быть за пределами этого цикла.
Изменить: О, и вы пропустите точку с запятой после добавления ().