Когда моя страница загружается, у меня выполняется вызов ajax. Когда пользователь устанавливает флажок, код просматривает данные json, возвращаемые вызовом ajax, чтобы определить, какие другие параметры показать / скрыть.
Вызов ajax возвращает правильные данные, триггеры onClick работают нормально, но когда я пытаюсь отфильтровать данные json (с помощью filter () или написав свой собственный метод с помощью forEach), это не удается.
С фильтром я получаю пустой массив, независимо от того, как я пишу команду или какие квалификаторы использую. С forEach оператор if (), который я использую для проверки данных, возвращает undefined, независимо от того, как я его пишу (item.RecipeCategoryOptionID == "idIKnowExists" возвращает "undefined").
Если я вставлю отладчик; и запустить в Chrome, я могу поставить точку останова в середине вызова forEach и проверить свой оператор if () в консоли, и я получаю реальное значение (в консоли вызов item.RecipeCategoryOptionID возвращает фактическое значение, not undefined).
Я даже попытался поместить вызов ajax в функцию onClick, просто чтобы заставить ЧТО-ТО сработать (а затем поместить оператор фильтра в функцию успеха). Это тоже не работает.
Как исправить ??
var constraints;
$(document).ready(function () {
$.ajax({
type: "GET",
url: "@Url.Action("GetConstraints", "RecipeManagement")",
dataType: "json",
success: function (data) {
constraints = data;
}
});
});
function CalledOnClick(checkbox) {
var selectedOptionId = $(checkbox).attr("class");
var isSelected = $(checkbox)[0].checked;
ApplyConstraints(selectedOptionId, isSelected);
}
function ApplyConstraints(selectedOptionId, isSelected) {
var relevantConstraints = constraints.filter(c => { return (c.RecipeCategoryOptionID == selectedOptionId) });
relevantConstraints.forEach(function (item) {
$("#isRequired" + item.RecipeCategoryTitleID).val(isSelected ? item.IsRequired : !item.IsRequired);
$("#isProhibited" + item.RecipeCategoryTitleID).val(isSelected ? item.IsProhibited : !item.IsProhibited);
});
}