Удалить: допустимый псевдокласс из входов с Javsacript - PullRequest
1 голос
/ 03 апреля 2019

У меня есть форма с несколькими разделами.Каждый раздел проверяется вручную с помощью проверки Bootstrap 4 (без отправки формы на реальный).Это прекрасно работает с кодом ниже:

let eventCreationForm = $(".event-creation-form");
if (!eventCreationForm[0].checkValidity()) {
    eventCreationForm.find(":submit").click();
}

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

Я думал, что что-то подобное может работать, eventCreationForm.find(":valid").removeClass(":valid");, но я полагаю, что это не так, поскольку это не настоящий класс.

В приведенном ниже примере есть ошибка callstack, но это только этот пример.,

$(document).ready(function(){
    var forms = document.getElementsByClassName('needs-validation');
    var validation = Array.prototype.filter.call(forms, function(form) {
      form.addEventListener('submit', function(event) {
        if (form.checkValidity() === false) {
          event.preventDefault();
          event.stopPropagation();
        }
        form.classList.add('was-validated');
      }, false);
    });
    
    $(".manual-submit").click(function(){
      let eventCreationForm = $(".event-creation-form");
      if (!eventCreationForm[0].checkValidity()) {
        eventCreationForm.find(":submit").click();
      }
    })
  })
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<form class="needs-validation event-creation-form" novalidate>
  <div class="form-row">
    <div class="col-md-4 mb-3">
      <label for="validationCustom01">First name</label>
      <input type="text" class="form-control" id="validationCustom01" placeholder="First name" value="Mark" required>
      <div class="valid-feedback">
        Looks good!
      </div>
    </div>
    <div class="col-md-4 mb-3">
      <label for="validationCustomUsername">Username</label>
      <div class="input-group">
        <div class="input-group-prepend">
          <span class="input-group-text" id="inputGroupPrepend">@</span>
        </div>
        <input type="text" class="form-control" id="validationCustomUsername" placeholder="Username" aria-describedby="inputGroupPrepend" required>
        <div class="invalid-feedback">
          Please choose a username.
        </div>
      </div>
    </div>
  </div>
  <button class="btn btn-primary manual-submit">Submit form</button>
</form>

1 Ответ

1 голос
/ 09 апреля 2019

Насколько я знаю, вы не можете полностью избавиться от псевдокласса :valid.

Однако проблема здесь не в этих псевдоклассах.Bootstrap 4 будет работать так, как задано в вопросе, когда класс was-validated будет НЕ добавлен в форму, при условии, что вы вручную добавите класс is-invalid, где это необходимо.

Согласнодокументация Bootstrap 4 :

В качестве запасного варианта вместо псевдоклассов для проверки на стороне сервера могут использоваться классы .is-invalid и .is-valid. Им не требуется проверенный родительский класс.

(Выделение мое.)

Причина, по которой вы видите :valid и :invalid Псевдоклассы стилизованы из-за класса was-validated на родительском объекте:

Bootstrap определяет область действия: недопустимых и: допустимых стилей для родительского класса .was-validated, обычно применяемого к .В противном случае любое обязательное поле без значения отображается как недопустимое при загрузке страницы.Таким образом, вы можете выбрать, когда их активировать (обычно после попытки отправки формы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...