За последние 24 часа нас посетили 20266 программистов и 1009 роботов. Сейчас ищет 371 программист ...

Проверка значения элемента формы

Тема в разделе "HTML и CSS", создана пользователем it75, 12 мар 2021.

  1. it75

    it75 Новичок

    С нами с:
    10 фев 2021
    Сообщения:
    5
    Симпатии:
    0
    Добрый день!
    В элементе <input> есть атрибуты minlength и pattern (и д.р.), которые браузер проверяет перед отправкой формы и если они не соответствуют, браузер выведет сообщение об ошибке, а форма отправлена не будет. Вид и содержание сообщения зависит от браузера.

    Если <input> используется вне формы, а для отправки данных из элемента используется событие onchange, то проверка атрибутов minlength и pattern на соответствие не выполняется.

    Вопрос: можно ли как то заставить перед обработкой события onchange, выполнить проверку атрибута pattern, и в случае не соответствия вывести сообщение об ошибке, и не выполнять событие onchange? Или хотя бы вывести сообщение об ошибке, чтоб выглядело однообразно?

    Вот мой тестовый пример из 2х файлов.
    Файл test.php:
    HTML:
    1. <!DOCTYPE html>
    2.     <head>
    3.         <title>Test</title>
    4.         <meta charset="UTF-8">
    5.         <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    6.         <script>
    7.             function update(arr) {
    8.                 $.post('test2.php', arr, function(data){$('#result').html(data);});
    9.             }
    10.         </script>      
    11.     </head>
    12.     <body>
    13.         <form method='post' action="test.php">
    14.             <h3>Input в форме с кнопкой типа submit</h3>
    15.             <p>Введите код из двух латинских символов:</p>
    16.             <input pattern="[A-Za-z]{2}" type="text" maxlength="2" name="code" value="">
    17.             <button type="submit">Отправить</button>
    18.         </form>
    19.  
    20.         <h3>Input c onchange</h3>
    21.         <p>Введите код из двух латинских символов:</p>
    22.         <input pattern="[A-Za-z]{2}" type="text" maxlength="2" name="code" value="" onchange="update({code: value})">
    23.  
    24.         <h3>Результат</h3>
    25.         <p id="result">
    26.             <?php
    27.            if (isset($_POST['code']))
    28.                echo "Код: {$_POST['code']}";
    29.            ?>
    30.         </p>
    31.     </body>
    32. </html>
    Файл test2.php:
    PHP:
    1. <?php
    2.  
    3. echo "Код: {$_POST['code']}";
    upload_2021-3-12_12-43-19.png
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Делать это поле в другой форме, при onchange - можно отправлять форму - следовательно получать нужные ошибки
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @it75, или так:
    Код (Javascript):
    1. function update(e, arr) {
    2.     if (!e.target.checkValidity()) {
    3.         e.target.reportValidity();
    4.         return;
    5.     }
    6.     console.log('arr: ', arr);
    7. }
    Чуть подправив при этом атрибут onchange="update(event, {code: value})"
    --- Добавлено ---
    HTML:
    1. <!DOCTYPE html>
    2.     <head>
    3.         <title>Test</title>
    4.         <meta charset="UTF-8">
    5.         <script>
    6.         function update(e, arr) {
    7.             if (!e.target.checkValidity()) {
    8.                 e.target.reportValidity();
    9.                 return;
    10.             }
    11.             console.log('arr: ', arr);
    12.         }
    13.         </script>
    14.     </head>
    15.     <body>
    16.         <h3>Input c onchange</h3>
    17.         <p>Введите код из двух латинских символов:</p>
    18.         <input id="t_input" pattern="[A-Za-z]{2}" type="text" maxlength="2" name="code" value="" onchange="update(event, {code: value})">
    19.         </p>
    20.     </body>
    21. </html>
     
    it75 нравится это.
  4. it75

    it75 Новичок

    С нами с:
    10 фев 2021
    Сообщения:
    5
    Симпатии:
    0
    Спасибо Sail! Это то что нужно!!!