Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Сравнение паролей в форме регистрации (https://javascript.ru/forum/dom-window/61631-sravnenie-parolejj-v-forme-registracii.html)

рони 27.02.2016 19:16

v.classic,
не знаю

destus 28.02.2016 12:46

v.classic,
В HTML5 нельзя указать браузеру, чтобы тот проверял валидность данных в поле, после того как в это поле будет что-то введено. Поэтому приходится всякими разными способами искусственным образом вызывать отправку форму с невалидными данными, чтобы показались таблички с ошибками. Этот скрипт выводит сообщение об ошибке, только когда вводим что-то во второе поле.
<style>
        input[type=password]:invalid {
            border: solid 2px red;
        }
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            var pass1 = document.querySelector('#password'),
                pass2 = document.querySelector('#password-check'),
                submit = document.querySelector('#submit');
            pass1.addEventListener('input', function () {
                this.value != pass2.value ? pass2.setCustomValidity('Пароли не совпадают') : pass2.setCustomValidity('');
            })
            pass2.addEventListener('input', function (e) {
                this.value != pass1.value ? this.setCustomValidity('Пароли не совпадают') : this.setCustomValidity('');
                !pass2.checkValidity() && submit.click();
            })
            submit.addEventListener('click', function (e) {
                pass1.value == '' && e.preventDefault();
            })
        })
    </script>
    <form class="form" action="address.txt" method="get">
        <input id="password" name="password" type="password" placeholder="Пароль">
        <input id="password-check" name="password-check" type="password" placeholder="Подтверждение пароля" title="">
        <input id="submit" name="submit" type="submit" value="Создать аккаунт">
    </form>

laimas 28.02.2016 13:35

Цитата:

Сообщение от destus
чтобы тот проверял валидность данных в поле, после того как в это поле будет что-то введено

Ну почему, и во время ввода, и после, он будет проверять, важно указать что.

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style>
input:focus:invalid {
    color: #f00;
}  
</style> 
</head> 
<body>
<input pattern="\d+" />
</body> 
</html>

destus 28.02.2016 13:46

Цитата:

Сообщение от laimas (Сообщение 409541)
Ну почему, и во время ввода, и после, он будет проверять, важно указать что.

Проверять будет, а показывать ошибку в виде сообщения? Без прикрутки дополнительного невидимого блока, который становится видимым, когда поле не соответствует указанному формату.

laimas 28.02.2016 13:50

Цитата:

Сообщение от destus
Проверять будет, а показывать ошибку в виде сообщения?


Ну тут надо определится, ибо сообщения показываются при отправке формы, и это логично.

Да и вообще, к нативной проверке валидности сравнение значений двух полей отношения не имеет, хотя можно в качестве pattern у поля имеющего фокус подставлять значение оппозитного поля.


Часовой пояс GMT +3, время: 06:05.