Не работают 2 AjaxForm на одной странице
Вызов первой формы phoneFormModal:
Вызов второй формы priceFormModal:
<div id="phone-popup" class="zoom-block white-popup mfp-hide">
[[!AjaxForm?
&form=`tpl.phoneForm`
&hooks=`recaptchav3,email`
&validate=`name:required,phone:required`
&emailSubject=`Заказ звонка с сайта site.net`
&emailTo=`ex1@gmail.com`
&emailTpl=`tpl.phoneFormSend`
&emailFrom=`web@site.net`
&emailFromName=`Пылюки`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено.`
]]
</div>
tpl.phoneForm<form id="phoneForm" method="post" enctype="multipart/form-data" role="form" action="[[~[[*id]]]]">
<div class="field">
<input type="text" name="name" placeholder="Имя" class="text" value="[[!+fi.name]]" required>
</div>
<div class="field">
<input type="text" name="phone" placeholder="Телефон" class="phone" value="[[!+fi.phone]]" required>
</div>
<div class="quip-fld recaptcha">
[[!recaptchav3_render]]
<span class="error_g-recaptcha-response error"></span>
</div>
<div class="field">
<button id="submit_phone" type="submit" name="submit_phone" value="Оправить" class="button medium yellow">Отправить</button>
[[+fi.success:is=`1`:then=`
<div class="alert alert-success">[[+fi.successMessage]]</div>`
]]
[[+fi.validation_error:is=`1`:then=`
<div class="alert alert-error">[[+fi.validation_error_message]]</div>`
]]
</div>
</form>
Вызов второй формы priceFormModal:
<div id="price-popup" class="zoom-block white-popup mfp-hide">
[[!AjaxForm?
&form=`tpl.priceForm`
&hooks=`recaptchav3,email`
&validate=`name:required,phone:required`
&emailSubject=`Запрос цены с сайта site.net`
&emailTo=`ex1@gmail.com`
&emailTpl=`tpl.priceFormSend`
&emailFrom=`web@site.net`
&emailFromName=`Пылюки`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено.`
]]
</div>
tpl.priceForm<form id="priceForm" method="post" enctype="multipart/form-data" role="form" action="[[~[[*id]]]]">
<div class="field">
<input type="text" name="name" placeholder="Имя" class="text" value="[[!+fi.name]]" required>
</div>
<div class="field">
<input type="text" name="phone" placeholder="Телефон" class="phone" value="[[!+fi.phone]]" required>
</div>
<div class="quip-fld recaptcha">
[[!recaptchav3_render]]
</div>
<div class="field">
<button id="submit_price" type="submit" name="submit_price" value="Оправить" class="button medium yellow">Отправить</button>
[[+fi.success:is=`1`:then=`
<div class="alert alert-success">[[+fi.successMessage]]</div>`
]]
[[+fi.validation_error:is=`1`:then=`
<div class="alert alert-error">[[+fi.validation_error_message]]</div>`
]]
</div>
</form>
В шаблоне после footer:[[$phoneFormModal]]
[[$priceFormModal]]
В данном примере письма приходят только от той формы, вызов которой раньше, то есть [[$phoneFormModal]], вторая форма отрабатывает, jGrowl зелёный, но письма не приходят. Если их в шаблоне поменять местами, письма будут приходить от той что выше. Мистика. Помогите пожалуйста. Комментарии: 4
Посмотри как я тут ooomti.ru/ разделил формы.
<script type="text/javascript">
$(document).on('af_complete', function(event, response) {
var form = response.form;
response.message='';
// Если у формы определённый id
if (form.attr('id') == 'modal_form') {
if (response.success) {
$('#modal_form_ok').addClass('d-block');
$('#modal_form_error').removeClass('d-block');
} else {
$('#modal_form_ok').removeClass('d-block');
$('#modal_form_error').addClass('d-block');
}
}
// Иначе печатаем в консоль весь ответ
else if (form.attr('id') == 'callback_form') {
if (response.success) {
$('#callback_form_ok').addClass('d-block');
$('#callback_form_error').removeClass('d-block');
} else {
$('#callback_form_ok').removeClass('d-block');
$('#callback_form_error').addClass('d-block');
}
} else if (form.attr('id') == 'used-pipes_form') {
if (response.success) {
$('#used-pipes_form_ok').addClass('d-block');
setTimeout (function(){
$('#used-pipes_form_ok').removeClass('d-block');
}.bind('#used-pipes_form_ok'), 5000);
$('#used-pipes_form_error').removeClass('d-block');
} else {
$('#used-pipes_form_ok').removeClass('d-block');
$('#used-pipes_form_error').addClass('d-block');
}
} else if (form.attr('id') == 'quiz_form') {
if (response.success) {
$('#quiz_form_ok').addClass('d-block');
}
}
});
</script>
submitVar в сниппетах задайте + hidden input name=submitvar
Это как?
Чтобы идентифицировать какая форма отправлена у Formit есть такой параметр — submitVar
docs.modx.com/current/en/extras/formit/index
Указываете это name в &submitVar=`` для каждой формы свое и должно помочь.
docs.modx.com/current/en/extras/formit/index
[[!AjaxForm?
&form=`tpl.priceForm`
&hooks=`recaptchav3,email`
&validate=`name:required,phone:required`
&emailSubject=`Запрос цены с сайта site.net`
&emailTo=`ex1@gmail.com`
&emailTpl=`tpl.priceFormSend`
&emailFrom=`web@site.net`
&emailFromName=`Пылюки`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено.`
&submitVar=`submit_phone`
]]
у вас в формах кнопки имеют разное name и это можно использовать.Указываете это name в &submitVar=`` для каждой формы свое и должно помочь.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.