[AjaxForm] Версия 1.1.0-pl Улучшенная регистрация js
Представляю вам новую версию компонента AjaxForm, который позволяет отправлять любые формы через Ajax.
Внимание, эта версия содержит изменения, которые могут поломать работу сторонних дополнений, использующих AjaxForm. Обязательно проверяйте работу форм после обновления.
AjaxForm очень универсальный, благодаря чему некоторые разработчики используют его в своих дополнениях, но у него есть 2 неприятные особенности:
Так что, встречайте версию 1.1.0-pl, которая добавляет 2 новых параметра для разработчиков:
То есть, теперь можно написать несколько вариантов объекта AjaxForm, положить в разные файлы javascript и вызывать вот так:
2 разных вызова AjaxForm на странице, с разными настройками и параметрами никак не мешают друг другу работать:
Как вы видите, в javascript больше нет глобального объекта afConfig, общего для всех скриптов. Его заменяет локальная переменная с конфигом, которую каждый экземпляр AjaxForm может использовать на свой лад.
Так что, я советую всем авторам, которые используют AjaxForm в своих дополнениях обновить их с учетом новых возможностей как можно скорее.
И я вам очень прошу, не включайте больше в свои собственные скрипты обрезанный объект AjaxForm, который перезаписывает стандартный.
Все изменения на GitHub.
Внимание, эта версия содержит изменения, которые могут поломать работу сторонних дополнений, использующих AjaxForm. Обязательно проверяйте работу форм после обновления.
AjaxForm очень универсальный, благодаря чему некоторые разработчики используют его в своих дополнениях, но у него есть 2 неприятные особенности:
- Он инициализируется один раз для контекста
- Соотвественно, он может подключить только один файл javascript
Так что, встречайте версию 1.1.0-pl, которая добавляет 2 новых параметра для разработчиков:
- &formSelector — Имя CSS класса, который будет использован как jQuery селектор для инициализации формы. По умолчанию «ajax_form».
- &objectName — Имя объекта для инициализации в подключаемом javascript. По умолчанию «AjaxForm».
То есть, теперь можно написать несколько вариантов объекта AjaxForm, положить в разные файлы javascript и вызывать вот так:
[[!AjaxForm]]
[[!AjaxForm?
&formSelector=`favorites-form`
&forntend_js=`/assets/.../favorites.js`
&objectName=`AjaxFavoritesForm`
]]
Первый вызов подключить стандартный AjaxForm с родными скриптами, и запустит его родной объект. А второй вызов загрузит полностью кастомизированный скрипт и запустит уже его объект.2 разных вызова AjaxForm на странице, с разными настройками и параметрами никак не мешают друг другу работать:
Как вы видите, в javascript больше нет глобального объекта afConfig, общего для всех скриптов. Его заменяет локальная переменная с конфигом, которую каждый экземпляр AjaxForm может использовать на свой лад.
Так что, я советую всем авторам, которые используют AjaxForm в своих дополнениях обновить их с учетом новых возможностей как можно скорее.
И я вам очень прошу, не включайте больше в свои собственные скрипты обрезанный объект AjaxForm, который перезаписывает стандартный.
Все изменения на GitHub.
Комментарии: 27
Обновился. Использую вот так:
[[!AjaxForm?
&snippet=`submit_obrazec`
&form=`tpl.AjaxForm.obrazec`
&successMessage=`Спасибо! Ваша заявка принята.`
]]
Теперь после отправки формы страница просто обновляется, т.е. successMessage не выводится, но сама форма работает норм. Я что-то новое забыл дописать?
Нужно хорошенько почистить кэш браузера, потому что изменился default.js.
Ну и проверь ошибки в консоли браузера.
Ну и проверь ошибки в консоли браузера.
Нужно хорошенько почистить кэш браузера, потому что изменился default.js.ок, щас попробую
Ну и проверь ошибки в консоли браузера.первым делом глянул)
Ой, затупил и неправильно воспринял параметр &objectName. Думал для каждой формы отдельно задаётся.
При обычном использовании он вообще не нужен — это для сторонних дополнений, или своих расширений.
Василий, на один из сайтов пытались атаку провести, и вот что написали:
Здравствуйте, вот пример одной из критических уязвимостей, называется Blind SQL injectionКак можно обезопасить?
POST /assets/components/ajaxform/action.php HTTP/1.1
Content-Length: 254
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Referer: http://****.ru:80/
Host: ******
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
Accept: */*
af_action=bd6adf0011d4f266ad2fa3802ff1ed40&email=sample%40email.tst&message=&name=e&pageId=if(now()%3dsysdate()%2csleep(0)%2c0)/*'XOR(if(now()%3dsysdate()%2csleep(0)%2c0))OR'%22XOR(if(now()%3dsysdate()%2csleep(0)%2c0))OR%22*/&workemail=sample%40email.tst
Исправил, обновись.
Подскажи, пожалуйста, куда копать: ajaxForm свежий, modx 2.5.4, хостинг modhost. Сохраняю ресурс, открываю сайт, всё хорошо, ajaxForm работает, стили и скрипты подключены. Обновляю страницу –
Uncaught ReferenceError: AjaxForm is not defined
И стилей, скриптов нет в коде. <link rel="stylesheet" href="/assets/components/ajaxform/css/default.css" type="text/css">
<script type="text/javascript" src="/assets/components/ajaxform/js/default.js"></script>
<script src="/assets/components/ajaxform/js/lib/jquery.form.min.js"></script>
<script src="/assets/components/ajaxform/js/lib/jquery.jgrowl.min.js"></script>
Работает, большое спасибо вам.
$.jGrowl(message, {theme: 'af-message-error', sticky: sticky, life: 1000});
Укажиет life
Подскажите пожалуйста как сделать
После отправки полям добавляется класс error.
К примеру у меня error с красным бекграундом, т.е как бы те поля которые не прошли валидацию будут с красными беком.
Все как бы ок.
Но если ввести повторно все правильно и поле проходит валидацию error не удаляется. И соответственно поле остается с красным бекграундом.
В default.js надо что то дописать?
Хочется сделать выделение неправильных полей, но чет не пойму
После отправки полям добавляется класс error.
К примеру у меня error с красным бекграундом, т.е как бы те поля которые не прошли валидацию будут с красными беком.
Все как бы ок.
Но если ввести повторно все правильно и поле проходит валидацию error не удаляется. И соответственно поле остается с красным бекграундом.
В default.js надо что то дописать?
Хочется сделать выделение неправильных полей, но чет не пойму
Как обрабатывается select?
Обычная форма работает, а вот добавляю select, то письма не отправляются, и зеленое окошко бьет «сообщение успешно отправлено», но когда удаляю весь select, то письма приходят.
Поясните, в чем дело, заранее искренне благодарю.
Обычная форма работает, а вот добавляю select, то письма не отправляются, и зеленое окошко бьет «сообщение успешно отправлено», но когда удаляю весь select, то письма приходят.
Поясните, в чем дело, заранее искренне благодарю.
<div class="secelct-item">
<span>Откуда</span>
<div class="for-select">
<select name="[[+fi.site]]" id="af_clinic" class="form-control">
<option>Выберите город</option>
<option value="Москва">Москва</option>
<option value="Оренбург">Оренбург</option>
</select>
</div>
</div>
<select name="[[+fi.site]]"
Зачем имя берётся из, скорее всего, несуществующего плейсхолдера?
По поводу класса error, видимо я пользовался старой версией AF.
Теперь интересует вопрос.
У меня несколько разных вызовов AF на 1 странице, они все похожи меняется лиш tpl'ки и валидация
Далее ничего опять не делая, иду к другой форме там все так же и другие формы так же.
modx 2.3.2
jquery-1.11.1.min.js(все сторонние скрипты пробовал убирать так же)
AF и FormIt последний
кеш браузера чистил(default.js)
консоль браузера чиста
некеш AF пробовал
пробовал 1 вызов на странице так же
дошло до того, что w3c валидацию прошел(а вдруг!:)
по поводу селектов и чеков тоже интересно
пробовал так(т.к. AF обертка):
rtfm.modx.com/extras/revo/formit/formit.tutorials-and-examples/formit.examples.simple-contact-page
Теперь интересует вопрос.
У меня несколько разных вызовов AF на 1 странице, они все похожи меняется лиш tpl'ки и валидация
[[!AjaxForm?
&snippet=`FormIt`
&form=`main.kalkul.form`
&emailTpl=`main.kalkul.sent`
&hooks=`spam,email`
&emailSubject=`Расчет стоимости ремонта`
&emailTo=`[[++emailsender]]`
&validate=`name:required,phone1:required,phone2:required,phone3:required,email:email:required,metraj:required,t_pom:required,t_rem:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение отправлено!`
]]
Страница загрузилась, ничего не делая стразу заполняю форму по валидации, оправляю, ошибок не выдает, но пишет, что форма успешно отправлена, а ведь должен &successMessage=`Сообщение отправлено!` и не приходит письмо. Ничего не делая, пробую ту же форму еще раз, теперь все как надо и письмо приходит.Далее ничего опять не делая, иду к другой форме там все так же и другие формы так же.
modx 2.3.2
jquery-1.11.1.min.js(все сторонние скрипты пробовал убирать так же)
AF и FormIt последний
кеш браузера чистил(default.js)
консоль браузера чиста
некеш AF пробовал
пробовал 1 вызов на странице так же
дошло до того, что w3c валидацию прошел(а вдруг!:)
по поводу селектов и чеков тоже интересно
пробовал так(т.к. AF обертка):
rtfm.modx.com/extras/revo/formit/formit.tutorials-and-examples/formit.examples.simple-contact-page
<label><input type="checkbox" name="diz_proj" value="Нет" class="checkbox" [[!+fi.diz_proj:FormItIsChecked=`Да`]]/> Разработать дизайн проект</label>
всегда приходит нет
Ребят есть какие либо догадки почему так происходит??
Василий, я решил проблему сам, но обращаюсь к вам.
проблема была в одно поле input
вот такой несуразный момент огорчил меня вчера до этого момента.
ошибка это или нет, я не знаю, решил просто удалить этот атрибут и все заработало.
проблема была в одно поле input
<input type="text" name="phone1" maxlength="2" class="input placeholder" disabled value="+7">
Стоял атрибут disabled у поля, т.е. при отправке AF считал, что у него состояние disabled(которое насколько я помню использует AF перед отправкой), но после того как нажимаешь на кнопку у него этот атрибут исчезает(вроде видел в js, что AF его удаляет). phone1 у меня был обязательным.вот такой несуразный момент огорчил меня вчера до этого момента.
ошибка это или нет, я не знаю, решил просто удалить этот атрибут и все заработало.
Ну основы HTML-то нужно знать. Внимание, атрибут disabled.
Блокирует доступ и изменение поля формы. Оно в таком случае отображается серым и недоступным для активации пользователем. Кроме того, такое поле не может получить фокус путем нажатия на клавишу Tab, мышью или другим способом. Тем не менее, такое состояние поля можно менять с помощью скриптов.Заблокированное в поле значение не передается на сервер.
капец я молодец… Спасибо!
Василий, а как бороться с тем, что если Чекбокс не отмечен на почту это поле приходило как «Нет»?
value=«нет» не катит)
Ато вместо этого приходит плейсхолдер
value=«нет» не катит)
Ато вместо этого приходит плейсхолдер
Догадался =)
Через модификатор, в чанке письма
Через модификатор, в чанке письма
[[+title:default=`Нет`]]
Вопрос по поводу своих сниппетов
Хочу сделать сниппет в котором вызывается pdoResources и ему передается limit. Т.е. на странице пару ресурсов загрузилось сразу, снизу кнопка показать еще, нажав на нее подгружаются еще ресурсы к примеру еще 3, нажав еще раз а ресурсов больше нет выдать «Больше нет»
«Простая» подгрузка ресурсов через аякс, хочется сделать через AF и по феншую так сказать, надо все таки кодить правильно и грамотно.
Я правильно думаю и реально такое? если есть пример такого буду очень благодарен! наводки тоже будет здорово!
Хочу сделать сниппет в котором вызывается pdoResources и ему передается limit. Т.е. на странице пару ресурсов загрузилось сразу, снизу кнопка показать еще, нажав на нее подгружаются еще ресурсы к примеру еще 3, нажав еще раз а ресурсов больше нет выдать «Больше нет»
«Простая» подгрузка ресурсов через аякс, хочется сделать через AF и по феншую так сказать, надо все таки кодить правильно и грамотно.
Я правильно думаю и реально такое? если есть пример такого буду очень благодарен! наводки тоже будет здорово!
В pdoPage такое уже реализовано.
Ничего себе! Спасибо Михаил! Буду пробовать :)
Вопрос(не претензия):
А это так и должно быть, что при каждой отправке формы в form добавляются безымянные input[hidden]
т.е. 10 раз нажал на отправить, 10 создалось.
на 2-х сайтах смотрел, тоже так же.
А это так и должно быть, что при каждой отправке формы в form добавляются безымянные input[hidden]
т.е. 10 раз нажал на отправить, 10 создалось.
на 2-х сайтах смотрел, тоже так же.
Доброго времени суток. Подскажите пожалуйста как можно отключить очистку полей после отправки?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.