как сделать хотя бы одно поле обязательным в контактной форме - PullRequest
0 голосов
/ 09 мая 2019

У меня есть контактная форма с 4 полями, и только поле номера телефона обязательно. Я хотел бы изменить его и сделать поле для телефона или электронной почты обязательным. Один из них должен быть заполнен. Если кто-то заполняет поле электронной почты, то поле телефона больше не является обязательным, и наоборот.

Ниже приведен код, который я должен изменить.

<script>
  document.addEventListener('DOMContentLoaded', function (event) {
    $(document).ready(function () {
      $.validator.addMethod(
        'regex',
        function (value, element, regexp) {
          var check = false
          return this.optional(element) || regexp.test(value)
        },
        'Sprawdź swoje dane.'
      )
      var validator = $('#sfform').validate({
        debug: false,
        ignore: '.ignore',
        rules: {
          email: {
            required: false,
            email: true
          },
          mobile: {
            required: true,
            regex: /^((00|\+)[1-9]([\s-\.]?\d){6,11}|0?[1-9]([\s-\.]?\d){8})$/
          },
          '00N1t00000ADSD0': {
            required: true
          },
          hiddenRecaptcha: {
            required: function () {
              if (grecaptcha.getResponse() == '') {
                return true
              } else {
                return false
              }
            }
          }
        },
        messages: {
          email: {
            email: 'Błędny adres email'
          },
          mobile: {
            required: 'Numer telefonu jest wymagany',
            regex: 'Błędny numer telefonu'
          },
          '00N1t00000ADSD0':
            {
              required: 'Zgoda jest wymagana do uzyskania kontaktu'
            },
          hiddenRecaptcha: {
            required: 'Zanaczenie pola jest wymagane'
          }
        },
        submitHandler: function () {
          document.getElementById('sfform').submit()
        },
        errorElement: 'span',
        errorPlacement: function (error, element) {
          error.addClass('invalid-feedback')
          element.closest('.form-group').append(error)
        },
        highlight: function (element, errorClass, validClass) {
          $(element).addClass('is-invalid')
        },
        unhighlight: function (element, errorClass, validClass) {
          $(element).removeClass('is-invalid')
        }
      })
    })
  })
</script>

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Мы уже нашли решение

           rules: {
               email: {
                   required: function() {
                       if(document.getElementById('mobile').value == '') {
                           return true
                       } else {
                           return false
                       }
                   },
                   email: true,
               },
               mobile: {
                   required: function() {
                       if(document.getElementById('email').value == '') {
                           return true
                       } else {
                           return false
                       }
0 голосов
/ 09 мая 2019

Вы можете вернуть логическое значение в зависимости от проверки другого поля с помощью:

rules: {
      email: {
        required: '#mobile:blank'
      },
      mobile: {
        required: '#email:blank',
        regex: /^((00|\+)[1-9]([\s-\.]?\d){6,11}|0?[1-9]([\s-\.]?\d){8})$/
      },
      ...

Выше предполагается, что ваши поля имеют идентификаторы #mobile и #email.

Подробнеео " выражении зависимости " здесь и о различных проверках :filled, :unchecked или :blank здесь .

...