HTML5 требуется атрибут одного из двух полей

У меня есть форма с двумя обязательными полями ввода:

<form>
    <input type="tel" name="telephone" required />
    <input type="tel" name="mobile" required />
    <input type="submit" value="Submit" />
</form>

Возможно ли, чтобы браузеры проверяли, что требуется только один из них? Если телефон заполнен, не делайте ошибки о том, что мобильный пуст, и наоборот

Ответы

Ответ 1

Я играл с некоторыми идеями и теперь имею рабочее решение для этой проблемы с помощью jQuery:

jQuery(function ($) {
    var $inputs = $('input[name=telephone],input[name=mobile]');
    $inputs.on('input', function () {
        // Set the required property of the other input to false if this input is not empty.
        $inputs.not(this).prop('required', !$(this).val().length);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form method="post">
  Telephone:
  <input type="tel" name="telephone" value="" required />
  <br />Mobile:
  <input type="tel" name="mobile" value="" required />
  <br />
  <input type="submit" value="Submit" />
</form>

Ответ 2

В любом случае вам лучше сделать проверку данных с помощью Javascript, потому что проверка HTML5 не работает в старых браузерах. Вот как:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Form Validation Phone Number</title>
</head>
<body>
    <form name="myForm" action="data_handler.php">
        <input type="tel" name="telephone">
        <input type="tel" name="mobile">
        <input type="button" value="Submit" onclick="validateAndSend()">
    </form>
    <script>
        function validateAndSend() {
            if (myForm.telephone.value == '' && myForm.mobile.value == '') {
                alert('You have to enter at least one phone number.');
                return false;
            }
            else {
                myForm.submit();
            }
        }
    </script>
</body>
</html>

.
Демо-версия здесь: http://codepen.io/anon/pen/LCpue?editors=100. Дайте мне знать, если это сработает для вас, если хотите.