передача данных из js в чанк FormIt
Добрый день, знатоки! У меня вопрос к вам, почему не работает такой код. В скрипте в чанке шапки сайта подключаю такой скрипт:
Как видно вызывается чанк handlerTpl, в нем прописаны те блоки, которые я заполнил в jquery скрипте:
А тут все работает: jsfiddle.net/51z4u4uo/1/
$(".kol_vo_comps" ).text("проверка1");
$(".kol_vo_servers" ).text("проверка2");
$(".cost_zakaz" ).text("проверка3");
Вызываю сниппет FormIt: [[!FormIt? &hooks=`email,redirect` &emailTpl=`handlerTpl` &emailSubject=`Сообщение` &emailTo=`тут_мой_ящик` &redirectTo=`1`]]Как видно вызывается чанк handlerTpl, в нем прописаны те блоки, которые я заполнил в jquery скрипте:
<dd><span class="kol_vo_comps"></span></dd>
<dt>Количество серверов:</dt>
<dd><span class="kol_vo_servers"></span></dd>
<dt>Стоимость заказа:</dt>
<dd><span class="cost_zakaz"></span></dd>
По идее, туда должны попадать значения, но не попадают. Почему? Когда пишу такой скрипт в песочнице, то все работает. Это что особенность ModX или компонента FormIt?А тут все работает: jsfiddle.net/51z4u4uo/1/
Комментарии: 10
Что никто не знает ответа на этот вопрос?
Не уверен, но может дело в том, что событие не $(document).ready, если форма шаблона подгружается аяксом?
Нет ситуация такая же. Вообще скрипт присвоения блокам span лежит в отдельном файле:
обернут он соответственно таким образом:
обернут он соответственно таким образом:
$(document).ready(function(){
.... тут функция присвоения значения блокам:
$(".kol_vo_comps" ).text("проверка1");
$(".kol_vo_servers" ).text("проверка2");
$(".cost_zakaz" ).text("проверка3");
});
А в чанке лежат блоки такие:<dd><span class="kol_vo_comps"></span></dd>
<dt>Количество серверов:</dt>
<dd><span class="kol_vo_servers"></span></dd>
<dt>Стоимость заказа:</dt>
<dd><span class="cost_zakaz"></span></dd>
На примере jsfiddle.net/51z4u4uo/1/ тут все работает, когда же в modx делаю, то не работает. Может это связанно с тем, что идет вызов сниппета FormIt поздний, когда скрипт js уже отработал отправку значений и не нашел таких span'ов? Мне кажется, причина в этом… Как исправить такую ситуацию?
Может быть… Консоль скриптов ругается?
Ради тестов можно поставить задержку на выполнение или вызвать самому после загрузки…
Если не ошибаюсь, если подключать форм через аякс то событие должно быть $(document).on('as_complete', document, function(e,d) {} или $(document).ajaxStop(function(){}
Ради тестов можно поставить задержку на выполнение или вызвать самому после загрузки…
Если не ошибаюсь, если подключать форм через аякс то событие должно быть $(document).on('as_complete', document, function(e,d) {} или $(document).ajaxStop(function(){}
По идее, туда должны попадать значенияКаким образом javascript должен поменять данные в чанки письма, если оно отправляется на стороне сервера через PHP?
Чанк получается из БД, FormIt подставляет там плейсхолдеры и отправляет его юзеру. Ни фронтенда, ни javascript, ничего там нет. Я даже не уверен, что этот чанк проходит через парсер MODX.
На javascript ты можешь поменять только значения отправляемой юзером формы. После отправки формы javascript нету.
Делал до этого бегунки, которые получали определенное значение в js, а потом без проблем это передавалось в чанк в блоки. Привожу код того же файла-скрипта:
Или чанк который вызывается из [[!FormIt? &hooks=`email,redirect` &emailTpl=`handlerTpl` &emailSubject=`Сообщение` &emailTo=`тут_мой_ящик` &redirectTo=`1`]] обрабатывается как-то иначе, чем чанки (хотя и те, и другие вызываются из БД), которые включены в шаблоны… Как тогда передать из js в этот чанк инфу?
$(document).ready(function(){
...
$("#amount").text(ui.value);
...
}
А в чанке моем написано следующее:...
<div id="amount"></div>
...
И туда успешно заливаются данные, в чем разница между первым примером и вторым?Или чанк который вызывается из [[!FormIt? &hooks=`email,redirect` &emailTpl=`handlerTpl` &emailSubject=`Сообщение` &emailTo=`тут_мой_ящик` &redirectTo=`1`]] обрабатывается как-то иначе, чем чанки (хотя и те, и другие вызываются из БД), которые включены в шаблоны… Как тогда передать из js в этот чанк инфу?
Это передается не в чанк, а в вывод на клиенте. FormIt же выполняется на сервере, т.е. про какие-бы то ни было джаваскрипты, тем более подключенные в шапке сайта, он знать не может. Чтобы формит знал данные, ему нужно передать их с помощью POST запроса, хоть как обычной отправкой формы, хоть с помощью джаваскрипта. И тогда в чанке handlerTpl нужно написать
<dd><span class="kol_vo_comps">[[+kol_vo_comps]]</span></dd>
и так далее. Сниппет FormIt обработает этот чанк, просто подставив полученные от клиента через POST данные и отправит вывод на почту.
Еще раз, если сразу не понятно.
Чанк handlerTpl не выводится клиенту, он не обрабатывается javascript. Он получается из БД и сразу улетает на почту.
Всё.
Чанк handlerTpl не выводится клиенту, он не обрабатывается javascript. Он получается из БД и сразу улетает на почту.
Всё.
1. в консоли ошибок нет?
2. вставьте какой нибудь алерт в этот блок, убедитесь что скрипт точно выполнятеся(а вдруг :) )
3. шаблон формы не грузится ведь через ajax?
2. вставьте какой нибудь алерт в этот блок, убедитесь что скрипт точно выполнятеся(а вдруг :) )
3. шаблон формы не грузится ведь через ajax?
Это передается не в чанк, а в вывод на клиенте. FormIt же выполняется на серверемне кажется ему (integralal ) на клиенте надо просто проставить дефолтовые значения
Спасибо всем за ответы, я решил проблему сам. В форму внедрил поле, и в него передавал значения. Так что вопрос закрыт. Спасибо еще раз всем!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.