Код: Выделить всё
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;
}
}
Код: Выделить всё
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;
}
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
Мобильная версия