Удаление класса .was-validated после успешной отправки формы
Здравствуйте.
Помогите пожалуйста решить задачу:
Есть форма на сайте status777.ru
Сделана с помощью Bootstrap
Так вот, после успешной отправки, у самой формы появляется класс was-validated, его нужно удалить, чтобы сообщения об ошибках исчезали после успешной отправки.
Прошу помощи. я с яваскриптом особо не дружу, умею только встраивать.
Заранее благодарю.
Помогите пожалуйста решить задачу:
Есть форма на сайте status777.ru
Сделана с помощью Bootstrap
Так вот, после успешной отправки, у самой формы появляется класс was-validated, его нужно удалить, чтобы сообщения об ошибках исчезали после успешной отправки.
Прошу помощи. я с яваскриптом особо не дружу, умею только встраивать.
Заранее благодарю.
Комментарии: 20
Если форма сделана с помощью AjaxForm+FormIt, то можно так
$(document).on('af_complete', function(e,response){
if(response.success){
$(response.form).find('.was-validated').removeClass('was-validated');
}
});
Пробывал. К сожалению не срабатывает.
Вообще код, который добавляет этот класс, выглядет так:
(function () {
'use strict'
// Получите все формы, к которым мы хотим применить пользовательские стили проверки Bootstrap
var forms = document.querySelectorAll('.needs-validation')
// Зацикливайтесь на них и предотвращайте отправку
Array.prototype.slice.call(forms)
.forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})()
Может на его основе как то изменить функцию?
Пробуйте так
(function () {
'use strict'
// Получите все формы, к которым мы хотим применить пользовательские стили проверки Bootstrap
var forms = document.querySelectorAll('.needs-validation')
// Зацикливайтесь на них и предотвращайте отправку
Array.prototype.slice.call(forms)
.forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
form.classList.add('was-validated')
}
else{
form.classList.remove('was-validated')
}
}, false)
})
})()
Но логичнее убирать класс после успешной отправки, наверное, а присланный код форму не отправляет.
Здравствуйте, код формы:
<form action="" method="post" class="ajax_form af_example">
<div class="row">
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<input type="text" id="af_name" name="name" value="[[+fi.name]]" placeholder="Ваше имя">
</div>
</div>
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<input type="tel" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="Ваш телефон">
</div>
</div>
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<input type="tel" id="af_email" name="email" value="[[+fi.email]]" placeholder="Почта для ответа">
</div>
</div>
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<select id="af_theme" name="theme" value="[[+fi.theme]]">
<option>Тема</option>
<option>Подбор оборудования</option>
<option>Консультация</option>
<option>Запрос КП</option>
<option>Заявка на обратный звонок</option>
</select>
</div>
</div>
<div class="col-xxl-12">
<div class="contact__input mb-30">
<textarea placeholder="Ваш вопрос"></textarea>
</div>
</div>
<div class="col-xxl-12">
<div class="contact__form-btn">
<button type="submit" class="d-btn-corp">Отправить</button>
</div>
</div>
</div>
[[+fi.success:is=`1`:then=`
<div class="alert alert-success">[[+fi.successMessage]]</div>
`]]
[[+fi.validation_error:is=`1`:then=`
<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
`]]
<p><input type="checkbox" name="checkme"/> Я прочитал(а) и согласен с <a href="[[~35]]" target="_blank">политикой конфиденциальности</a></p>
</form>
<div id="success-modal" class="alert alert-info d-none">
<p>Спасибо за обращение! Сообщение успешно отправлено, мы перезвоним Вам в течении 5 минут!</p>
</div>
Скрипт класс не убирает…<script>
$(document).on('af_complete', function(e,response){
if(response.success){
$(response.form).find('#success-modal').removeClass('d-none');
}
});
</script>
Пробовал и этот <script>
$(document).on('af_complete', function(e,response){
if(response.success){
$(response.form).removeClass('d-none');
}
});
</script>
В консоли браузера ошибок нет $(response.form).find('#success-modal').removeClass('d-none');
А #success-modal точно внутри формы?$(response.form).removeClass('d-none');
А у формы точно есть класс 'd-none'?
У этого блока, который должен появиться после отправки:
<div id="success-modal" class="alert alert-info d-none">
<p>Спасибо за обращение! Сообщение успешно отправлено, мы перезвоним Вам в течении 5 минут!</p>
</div>
Я вижу. И вижу что он вне формы. А ещё у него id, т.е можно сделать так
$('#success-modal').removeClass('d-none');
Я пробовал и в форме этот блок указывать и после формы — никак не работает…
Так и указано, что для id:
Так и указано, что для id:
<script>
$(document).on('af_complete', function(e,response){
if(response.success){
$(response.form).find('#success-modal').removeClass('d-none');
}
});
</script>
Или не это имеете в виду?
Дорогой друг, вы явно не понимаете что делаете, почитайте про получение html-элементов в JS
Сделал как написано в инструкции, причем на одном сайте работает, на этом нет, не могу понять в чем дело. Как я понимаю, мы отлавливаем событие af_complete, по его наступлению, мы удаляем у элемента с id=success-modal класс d-none
Ну да, всё так. Только элемент надо правильно выбирать у которого класс удаляете. Я же написал как надо.
$('#success-modal').removeClass('d-none');
Форма:
<form action="" method="post" class="ajax_form af_example">
<div class="row">
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<input type="text" id="af_name" name="name" value="[[+fi.name]]" placeholder="Ваше имя">
</div>
</div>
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<input type="tel" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="Ваш телефон">
</div>
</div>
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<input type="tel" id="af_email" name="email" value="[[+fi.email]]" placeholder="Почта для ответа">
</div>
</div>
<div class="col-xxl-6 col-xl-6 col-lg-6 col-md-6">
<div class="contact__input mb-30">
<select id="af_theme" name="theme" value="[[+fi.theme]]">
<option>Тема</option>
<option>Подбор оборудования</option>
<option>Консультация</option>
<option>Запрос КП</option>
<option>Заявка на обратный звонок</option>
</select>
</div>
</div>
<div class="col-xxl-12">
<div class="contact__input mb-30">
<textarea placeholder="Ваш вопрос"></textarea>
</div>
</div>
<div class="col-xxl-12">
<div class="contact__form-btn">
<button type="submit" class="d-btn-corp">Отправить</button>
</div>
</div>
</div>
[[+fi.success:is=`1`:then=`
<div class="alert alert-success">[[+fi.successMessage]]</div>
`]]
[[+fi.validation_error:is=`1`:then=`
<div class="alert alert-danger">[[+fi.validation_error_message]]</div>
`]]
<p><input type="checkbox" name="checkme"/> Я прочитал(а) и согласен с <a href="[[~35]]" target="_blank">политикой конфиденциальности</a></p>
<div id="success-modal" class="alert alert-info d-none">
<p>Спасибо за обращение! Сообщение успешно отправлено, мы перезвоним Вам в течении 5 минут!</p>
</div>
</form>
Скрипт:<script>
$(document).on('af_complete', function(e,response){
if(response.success){
$(response.form).find('#success-modal').removeClass('d-none');
}
});
</script>
Не срабатывает, в консоли браузера смотрю, класс d-none не убирается Если форма сделана с помощью AjaxForm+FormIt, то можно так
$(document).on('af_complete', function(e,response){
if(response.success){
$(response.form).find('.was-validated').removeClass('was-validated');
}
});
Должно работать. Единственное что стоит проверить, а метод find у jquery не по детям ищет? Если по детям, то он не может найти класс was-validated, потому что он у формы.
По детям))) А класс у формы, тогда так можно попробовать
$(document).on('af_complete', function(e,response){
if(response.success){
$(response.form).removeClass('was-validated');
}
});
Артур спасибо большое! Работает. И вообще, всем спасибо! Народ, вы меня простите, зануду, я бы хотел еще спросить: не могли бы вы подсказать какой-нибудь курс или книгу по Javascript, ну так чтобы реально «вставило»?!
Я не посоветую, не помню чтобы я что-то системно читал или смотрел по JS. Я гуглил решение конкретных задач и постепенно освоился, хотя конечно мне есть куда расти.
Понял. Хорошо. Ну тогда, удачи! Расти. Еще раз спасибо
Спасибо вам
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.