Добавление проверок в поле «Номер контакта» с помощью ASP.NET Core

может кто-нибудь помочь мне с моей ошибкой. В настоящее время я создаю резидентные формы на этой странице для страницы контактов. Теперь я хочу добавить проверки в поля контактов. Я хочу, чтобы, если житель выбирает мобильный телефон, номер мобильного телефона должен начинаться с 09. Однако, когда жители выбирают дом, проверка формата номера не выполняется.

Значения типа контакта

1 для мобильных устройств; 2 для дома

Смотрите прикрепленный код.

Javascript для проверки контактного номера:

function validateContactNumber

РегистрацияStepThree.cshtml

@model Registration
@{
    ViewData["Title"] = "Register Page - Step Three";
}
<div class = "container mt-5">
    <div class = "row">
        <div class = "col-md-12">
            <h2 class = "text-center mb-4">Contact Details</h2>
            <form asp-page-handler = "RegisterStepThree" method = "post">
                <div id = "addressesContainer" class = "row mt-3 fieldRow">
                    @for (int i = 0; i < 2; i++)
                    {
                        <div class = "col-md-2 mb-3">
                            <label class = "form-label">Contact type</label>
                            <select class = "form-select contact-type" asp-for = "Contacts[i].ContactType" onchange = "validateContactType(this)" id = "contactType@(i)">
                                <option value = "">Select Contact Type</option>
                                @foreach (var type in ViewBag.ContactTypes.ContactTypes)
                                {
                                    <option value = "@type.CODE_VALUE">@($" {type.Description}") Number</option>
                                }
                            </select>
                        </div>
                        <div class = "col-md-3 mb-3">
                            <label class = "form-label">Contact No</label>
                            <input type = "text" class = "form-control contact-field" asp-for = "Contacts[i].ContactNumber" id = "contactNumber@(i+1)" placeholder = "Enter contact number" maxlength = "11" oninput = "validateContactNumber(this)">
                        </div>
                    }
                </div>
                <!-- Error message display area -->
                <div id = "error-message" class = "text-danger mb-3" style = "display: none;"></div>
                <button type = "submit" id = "submit-button" class = "btn btn-primary w-100" disabled>Next</button>
            </form>
        </div>
    </div>
</div>

@section Scripts {
    <script>
        function validateContactType(selectElement) {
            const contactTypeElements = document.querySelectorAll('.contact-type');
            const selectedValues = Array.from(contactTypeElements).map(el => el.value);
            const errorMessageElement = document.getElementById('error-message');

            const hasDuplicates = selectedValues.some((value, index) =>
                value && selectedValues.indexOf(value) !== index
            );

            if (hasDuplicates) {
                errorMessageElement.innerText = 'Contact type already selected';
                errorMessageElement.style.display = 'block';
                selectElement.value = ''; // Reset the current selection
            } else {
                errorMessageElement.style.display = 'none';
            }
            validateForm();
        }

        function validateContactNumber(inputElement) {
            const contactTypeElement = inputElement.closest('.fieldRow').querySelector('.contact-type');
            const errorMessageElement = document.getElementById('error-message');

            inputElement.value = inputElement.value.replace(/[^0-9]/g, '');

            if (contactTypeElement.value === '1') { // Assuming '1' is the value for "Mobile"
                if (!/^09\d{9}$/.test(inputElement.value)) {
                    errorMessageElement.innerText = 'Please input a valid mobile number starting with 09';
                    errorMessageElement.style.display = 'block';
                    inputElement.setCustomValidity('Invalid mobile number');
                } else {
                    errorMessageElement.style.display = 'none';
                    inputElement.setCustomValidity('');
                }
            } else {
                inputElement.setCustomValidity('');
            }

            validateForm();
        }

        function validateForm() {
            const contactTypeElements = document.querySelectorAll('.contact-type');
            const contactFieldElements = document.querySelectorAll('.contact-field');
            const submitButton = document.getElementById('submit-button');
            const errorMessageElement = document.getElementById('error-message');

            let isValid = true;

            contactTypeElements.forEach(element => {
                if (element.value === '') {
                    isValid = false;
                }
            });

            contactFieldElements.forEach(element => {
                if (element.value === '' || !element.checkValidity()) {
                    isValid = false;
                }
            });

            if (isValid && errorMessageElement.style.display === 'none') {
                submitButton.disabled = false;
            } else {
                submitButton.disabled = true;
            }
        }

        const contactFields = document.querySelectorAll('.contact-field, .contact-type');
        contactFields.forEach(field => {
            field.addEventListener('input', validateForm);
        });

        document.addEventListener('DOMContentLoaded', validateForm);
    </script>
}

Кто-нибудь может мне помочь?

Erck 11.07.2024 00:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Причина, по которой проверка не работает должным образом, заключается в том, что селектор всегда является первым выбором.

Самый близкий код const contactTypeElement = inputElement.closest('.fieldRow').querySelector('.contact-type'); — это div fieldRow. Тогда querySelector всегда будет выбирать первый выбор.

Я предлагаю вместо этого использовать const contactTypeElement = inputElement.parentElement.previousElementSibling.querySelector('.contact-type');.

Кроме того, вам также необходимо убедиться, что тип мобильного телефона ViewBag.ContactTypes CODE_VALUE равен 1.

Более подробную информацию вы можете найти в приведенных ниже кодах:

    function validateContactNumber(inputElement) {
        const contactTypeElement = inputElement.parentElement.previousElementSibling.querySelector('.contact-type');

        
        const errorMessageElement = document.getElementById('error-message');

        inputElement.value = inputElement.value.replace(/[^0-9]/g, '');
       
        if (contactTypeElement.value === '1') { // Assuming '1' is the value for "Mobile"
            if (!/^09\d{9}$/.test(inputElement.value)) {
                errorMessageElement.innerText = 'Please input a valid mobile number starting with 09';
                errorMessageElement.style.display = 'block';
                inputElement.setCustomValidity('Invalid mobile number');
            } else {
                errorMessageElement.style.display = 'none';
                inputElement.setCustomValidity('');
            }
        } else {
            inputElement.setCustomValidity('');
        }

        validateForm();
    }

const contactTypeElement = inputElement.closest('.fieldRow').querySelector('.contact-type');

всегда выбирает первый элемент «тип контакта».

вы можете обернуть все элементы внутри цикла for, начиная с <div class = "col-md-2 mb-3">, с помощью div с классом fieldRow и удалить fieldRow из <div id = "addressesContainer" class = "row mt-3 fieldRow">

Другие вопросы по теме