[AjaxForm] Версия 1.0.2-pl
В репозитории Simple Dream доступна новая версия компонента AjaxForm.
Список изменений:
Добавлен вызов jQuery события af_complete после отправки формы. Теперь вы можете что-то делать с ответом от сервера:
[#4] Если в системе установлен pdoTools, то чанк с формой будет обрабатывать именно он, а значит вы можете использовать @INLINE чанки. Напоминаю, что в них не работают сниппеты и фильтры!
[#3] Теперь можно выставлять плейсхолдеры в форме, указав их в параметре сниппета. То есть:
[#2] Убрал класс error у полей для вывода ошибок в стандартной форме. Он теперь добавляется автоматически, если форма не прошла валидацию.
Обновляемся, тестируем, пишем замечания и предложения.
Список изменений:
Добавлен вызов jQuery события af_complete после отправки формы. Теперь вы можете что-то делать с ответом от сервера:
$(document).on('af_complete', function(event, response) {
console.log(event, response);
});[#4] Если в системе установлен pdoTools, то чанк с формой будет обрабатывать именно он, а значит вы можете использовать @INLINE чанки. Напоминаю, что в них не работают сниппеты и фильтры!
[#3] Теперь можно выставлять плейсхолдеры в форме, указав их в параметре сниппета. То есть:
[[!AjaxForm?fi.name=`Петр Петрович`]]заполнит имя в дефолтном чанке.[#2] Убрал класс error у полей для вывода ошибок в стандартной форме. Он теперь добавляется автоматически, если форма не прошла валидацию.
Обновляемся, тестируем, пишем замечания и предложения.
Комментарии: 67
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
То есть мне нужно если существует ошибка добавить класс has-error к div'у. Почему-то этого сейчас не происходит. Как это правильнее сделать?
Нужно или поменять javascript, или установить новую версию и удалить в своём чанке везде класс «error» — он будет добавляться автоматически теперь.
Ну и вместо has-error заменить оформление на error, понятное дело.
Будем эксперементировать…
В функции af_complete, res.result и res.data показывают undefined. Или я что-то недопонимаю?
Заранее благодарен.
А по теме — Вась, спасибо! Как всегда всё годно и в лучшем виде)
Отпуска тебе охрененного!
на странице?
Единственное, не могу понять — почему, когда приходит письмо, в заголовке «От» вместо имени отправителя стоит просто [[+fi.name]]?
Вызов сниппета, в данном случае, такой:
Причем, сначала было нормально (отображалось имя пользователя), потом, одно время, туда прописывалось, почему-то, имя чанка (chn_ContactFormTpl), а сейчас отображается просто [[+fi.name]].
То есть — пустота, потому что плейсхолдера name на странице, при вызове сниппета не было.
А сейчас ты убрал пустой параметр, и там стало значение по умолчанию. Сам сломал — сам починил.
res предсказуемо содержит объект jquery.event, таргетом которого является $(document).
В соответствии с API jQuery дополнительные параметры передаются обработчику начиная со второго аргумента функции.
То есть так:
Установил новую версию, но если на странице 3 формы, то не понятно к какой относится это сообщение, нет указания на форму.
Так же класс error автоматически не указывается для полей формы, может быть потому что их несколько.
При этом, не забудь определить переменную form (она должна содержать объект jQuery).
Ну и твой сниппет должен отдавать json с полями success и key по меньшей мере.
Первый:
1. У каждой из форм есть атрибут id, а так же тэг 2. Сниппет должен вместе с основным ответом возвращать значение $_POST['formid'] виде {«formid»:«значение»}.
3. Тогда обработчик события выглядит следующим образом:
Второй:
1. Через гитхаб или как-то по-другому предложить Василию изменить часть кода default.js таким образом:
2. Если коммит будет принят, то тогда твой скрипт будет выглядеть так:
Где вообще хранятся ключи? Форма, то начала отправлять, но пришлось вносить данные в action.php что ни есть хорошо. Может, есть лучшее решение?
скорее всего у вас с ними что то не так…
А скорее всего дело в плагине…
Выскакивает ошибка «Не могу найти указанный ключ формы (action).», но только в Opera в остальных все работает. Хотя action вроде есть «af_action:fe59f32563f46ab8a985edd0e125005b», всю голову сломал. Не подскажите куда копать. И еще, не подскажите, как решить вопрос с кешированием, если не использовать xfpc. Я только начинаю работать с Modx!
Спасибо!
Не могу найти указанный ключ формы (action)
Имя
[[+fi.name]]
E-mail
[[+fi.email]]
Сообщение
[[+fi.message]]
Очистить Отправить
т.е. вместо значений введенных в input мне приходят плэйсхолдеры(если неправильно назвал прошу простить я совсем новичек в этом деле), подскажите где искать причину ошибки?
Сейчас, даже если валидация полей не пройдена, скрипт на onsubmit срабатывает.
Заранее благодарен.
2. Забить и продолжать пользоваться валидацией FormIt, ибо любую проверку на фронте можно всегда обойти. А на стороне сервера — никак.
Если есть возможность, поясни как победить проблему. Спасибо скину сразу.
Заранее благодарен.
Ни AjaxForm, ни FormIt тут ничем не мешает и не помогает, это вообще другое.
Никакого эффекта — форма уходит.
Поэтому, нужно научить скрипт AjaxForm смотреть в результаты работы твоей проверки.
Вешаем свой валидатор на форму с классом .ajax_form:
А дальше копируем родной javascript в custom.js и добавляем проверку afValidated перед отправкой вот здесь:
Если переменная afValidated существует и равна false — форма не отправится.
Переименовывать javascript и вносить в него правки больше не нужно. Просто запускай свой валидатор и выставляй переменную в true или false.
По-идее, должен закрывать окно после отправки формы. Но закрывает при нажатии кнопки «Отправить», даже если поля не заполнены.
Вешаю вот такую валидацию полей:
Вроде бы всё отрабатывает нормально, но при первой отправке пустой формы срабатывает action.php и как следствие код на событие «af_complete».
В чем может быть дело?
Заранее благодарен.
У меня есть несколько форм на одной странице. У каждой свой id="". На событие af_complete от формы с id=«test-form» мне нужно повесить Как это реализовать?
Заранее благодарен.
Форма находится в response.form:
Не работает AjaxForm при использовании прикрепления файла в IE 8 и 9 как минимум. (опера, хром в норме)
Если указать в поле enctype=«multipart/form-data»:
Если убрать эту надпись то все отправляется но естественно приходит только путь файла на компе.
Пишет ошибку в ие:
Куда копать подскажите пожалуйста.?
После отправки полям добавляется класс error.
К примеру у меня он с красным бекграундом, т.е как бы те поля которые не прошли валидацию будут красными.
Все как бы ок.
Но если ввести все правильно повторно и поле проходит валидацию error не удаляется. И соответственно поле остается с красным бекграундом.
В default.js надо что то дописать?
При переносе сайта на сервер pagemaster возникла странная ошибка. AjaxForm возвращает ошибку о том, что email не валидный. Но хуки Formit (отправка на email и запись в базу) выполняются. Есть другая форма на этом сайте (без email). Так вот она отправляется ОК. Возвращает success.
На тестовом такой проблемы нет. Поэтому непонятно в чем может быть проблема.
А есть возможность использовать две формы на странице и как? У одной формы есть input hidden с хэшем, у второй формы пустой input hidden, соответственно по дефолту получаю «Не указан ключ формы (action).»
Как решить?
Тестовый сайт уже давно отключен, но можно просто взять код из примера и проверить у себя.
Возник такой вопрос, почему не работает добавление класса, если есть ошибка:
Я ничего не упустил в [[+fi.error.name:notempty=` has-error`]]?
Показывать/скрывать ошибки при таком подходе можно только через javascript — и в стандартных чанках это предусмотрено. А плейсхолдеры с ошибками там прописаны на случай работы без ajax (или вообще по привычке, не помню уже).
Пытаюсь отдать данные при отправки форма, использую ajaxForm и formIt.
В сниппете возращаю но от сервера приходит пустой массив Если отправлять данные в лог, то все ок В чем может быть проблема, никто не сталкивался?