Чтобы сделать этот код более СУХИМ (т. Е. Не повторять себя), вы можете поместить общие классы в элементы, чтобы сгруппировать их по поведению.Затем вы можете привязать обработчики событий к этим классам и использовать обход DOM для связи элементов друг с другом.
Также обратите внимание, что вам нужен оператор else
для отображения сообщений проверки и класса ошибок на оболочке.Этого можно добиться проще, используя toggleClass()
и предоставив логическое значение, чтобы указать, при каких обстоятельствах класс должен быть добавлен / удален.Попробуйте это:
$('.field').on('input', function() {
var $field = $(this);
$field.closest('.field-wrapper').toggleClass('has-error', $field.val().trim() == "");
$field.next('.validation-msg').toggleClass('hide', $field.val().trim() != "");
});
.has-error { color: #C00; }
.hide { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="field-wrapper">
<label for="first_name">First Name:</label>
<input class="field" type="text" name="first_name" id="first_name">
<div class="validation-msg hide">
<p><i class="fas fa-exclamation`enter code here`-circle"></i> Please tell us your first name</p>
</div>
</div>
<div class="field-wrapper">
<label for="last_name">Last Name:</label>
<input class="field" type="text" name="last_name" id="last_name">
<div class="validation-msg hide">
<p><i class="fas fa-exclamation-circle"></i> Please tell us your last name</p>
</div>
</div>
Преимущество этого шаблона в том, что он бесконечно расширяемый, пока структура HTML вокруг полей остается согласованной.