Рекурсивная функция, вызывающая неправильный порядок последовательностиJavascript

Форум по Javascript
Ответить
Anonymous
 Рекурсивная функция, вызывающая неправильный порядок последовательности

Сообщение Anonymous »

Почему MovetoFirsterror вызывается перед LinkedFormwitherRorid, установленной в логике проверки формы? Проблема в том, что MovetoFirsterror вызывается до установки LinkedFormWitherRorid, что приводит к тому, что модальная, содержащая связанную форму, с ошибками оставаться скрытыми. Кроме того, журналы консоли показывают неожиданную последовательность, указывающую на проблему времени в моей логике проверки. Если ошибки обнаружены в связанной форме, я установил глобальный LinkedFormwitherRorid на идентификатор ошибкой формы и возвращаюсь рано. После проверки, если FormErrors> 0, я вызываю MovetOfirsterRor, чтобы сосредоточиться на первой ошибке, которая также должна показать модальную, если ошибка находится в связанной форме.

Код: Выделить всё

1-false

2-Setting LinkedFormWithErrorID to LayoutSelectModal

3-Form has 3 errors, not submitting.
< /code>
Это говорит о запусках Movetofirsterror до того, как будет установлен LinkedFormWiterRorid, поэтому модал не появляется. Основная форма не имеет ошибок; Все ошибки находятся в связанной форме (Layoutelectmodal). 
[b] Описание проблемы [/b] 
В моем случае: 
Основная форма не имеет ошибки (FormErrors остается 0 после ее проверки). Чтобы стать 3. Ошибка находится в связанной форме. 
[b] ожидаемое поведение [/b] 
1-Complete All Validation (основные и связанные формы) сначала (возвращайте рано, как только ошибка встречается с любым Speckings Speaking Formwitror-Formation).    Ошибки. Функция < /strong>
Это проверяет основную форму и связанные формы, настройка FormErrors и LinkedFormWitherRORID. < /P>
let FormErrors = 0; // Global error counter
let LinkedFormWithErrorID = false; // Tracks ID of errored linked form

function validateForm(Form) {
FormErrors = 0;
let InputGroups = Form.getElementsByClassName("InputGroup");
// ...  (input group validation logic omitted for brevity) ...

// Linked Forms Validation
LinkedFormWithErrorID = false; // Reset
if (Form.hasAttribute("LinkedForms")) {
const linkedFormIds = Form.getAttribute("LinkedForms").split(",").map((id) => id.trim());
for (const linkedFormId of linkedFormIds) {
const linkedForm = document.getElementById(linkedFormId);
if (linkedForm) {
const isValid = validateForm(linkedForm); // Recursive call
if (!isValid) {
LinkedFormWithErrorID = linkedFormId;
console.log("Setting LinkedFormWithErrorID to " + LinkedFormWithErrorID);
return false; // Early return on error
}
} else {
console.warn(`Linked form with ID "${linkedFormId}" not found.`);
}
}
}

// Check for errors
if (FormErrors > 0) {
MoveToFirstError(Form); // Focus on first error
return false;
} else {
return true;
}
}
функция MovetoFirsterror

Код: Выделить всё

This focuses on the first error in the main form or linked form and should show the modal if needed.
function MoveToFirstError(form) {
console.log(LinkedFormWithErrorID); // Logs 'false' first
const firstError = form.getElementsByClassName('Error')[0];
if (firstError) {
firstError.focus();
firstError.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
if (form.hasAttribute('MultiPage')) {
ShowFirstErrorFormStep(form, firstError);
}
return false;
}

if (LinkedFormWithErrorID) {
const linkedForm = document.getElementById(LinkedFormWithErrorID);
if (linkedForm) {
if (linkedForm.parentNode.parentNode.classList.contains('modal')) {
linkedForm.parentNode.parentNode.classList.remove('hidden'); // Show modal
}
linkedForm.classList.remove('hidden');
const firstError = linkedForm.getElementsByClassName('Error')[0];
if (firstError) {
firstError.focus();
firstError.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
return false;
}
}

return true;
}
function function
This triggers validation and submission.
async function SubmitForm(Form, ReqMethod, ReqTarget, formData) {
if (Form) {
validateForm(Form);
if (FormErrors > 0) {
console.warn("Form has " + FormErrors + " errors, not submitting.");
return {
success: false,
message: "Form has " + FormErrors + " errors, not submitting.",
};
}
// ... (data collection and submission logic omitted) ...
}
// ... (fetch logic omitted) ...
}
< /code>
Вопросы < /p>
Почему Movetofirsterror называется до установки LinkedFormwitherRorid?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ence-order
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»