передача данных из js в чанк FormIt

Добрый день, знатоки! У меня вопрос к вам, почему не работает такой код. В скрипте в чанке шапки сайта подключаю такой скрипт:

$(".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/
Андрей
07 октября 2014, 03:04
modx.pro
2 555
0

Комментарии: 10

Андрей
07 октября 2014, 08:02
0
Что никто не знает ответа на этот вопрос?
    Razer
    07 октября 2014, 08:09
    0
    Не уверен, но может дело в том, что событие не $(document).ready, если форма шаблона подгружается аяксом?
      Андрей
      07 октября 2014, 08:22
      0
      Нет ситуация такая же. Вообще скрипт присвоения блокам 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'ов? Мне кажется, причина в этом… Как исправить такую ситуацию?
        Razer
        07 октября 2014, 08:32
        0
        Может быть… Консоль скриптов ругается?

        Ради тестов можно поставить задержку на выполнение или вызвать самому после загрузки…

        Если не ошибаюсь, если подключать форм через аякс то событие должно быть $(document).on('as_complete', document, function(e,d) {} или $(document).ajaxStop(function(){}
    Василий Наумкин
    07 октября 2014, 08:39
    +1
    По идее, туда должны попадать значения
    Каким образом javascript должен поменять данные в чанки письма, если оно отправляется на стороне сервера через PHP?

    Чанк получается из БД, FormIt подставляет там плейсхолдеры и отправляет его юзеру. Ни фронтенда, ни javascript, ничего там нет. Я даже не уверен, что этот чанк проходит через парсер MODX.

    На javascript ты можешь поменять только значения отправляемой юзером формы. После отправки формы javascript нету.
      Андрей
      07 октября 2014, 08:48
      0
      Делал до этого бегунки, которые получали определенное значение в js, а потом без проблем это передавалось в чанк в блоки. Привожу код того же файла-скрипта:

      $(document).ready(function(){ 
      ...
      $("#amount").text(ui.value);
      ...
      }
      А в чанке моем написано следующее:
      ...
      <div id="amount"></div>
      ...
      И туда успешно заливаются данные, в чем разница между первым примером и вторым?

      Или чанк который вызывается из [[!FormIt? &hooks=`email,redirect` &emailTpl=`handlerTpl` &emailSubject=`Сообщение` &emailTo=`тут_мой_ящик` &redirectTo=`1`]] обрабатывается как-то иначе, чем чанки (хотя и те, и другие вызываются из БД), которые включены в шаблоны… Как тогда передать из js в этот чанк инфу?
        Виталий Киреев
        07 октября 2014, 09:21
        0
        Это передается не в чанк, а в вывод на клиенте. FormIt же выполняется на сервере, т.е. про какие-бы то ни было джаваскрипты, тем более подключенные в шапке сайта, он знать не может. Чтобы формит знал данные, ему нужно передать их с помощью POST запроса, хоть как обычной отправкой формы, хоть с помощью джаваскрипта. И тогда в чанке handlerTpl нужно написать
        <dd><span class="kol_vo_comps">[[+kol_vo_comps]]</span></dd>
        и так далее. Сниппет FormIt обработает этот чанк, просто подставив полученные от клиента через POST данные и отправит вывод на почту.
          Василий Наумкин
          07 октября 2014, 09:45
          0
          Еще раз, если сразу не понятно.

          Чанк handlerTpl не выводится клиенту, он не обрабатывается javascript. Он получается из БД и сразу улетает на почту.

          Всё.
        Alexei
        07 октября 2014, 09:37
        0
        1. в консоли ошибок нет?
        2. вставьте какой нибудь алерт в этот блок, убедитесь что скрипт точно выполнятеся(а вдруг :) )
        3. шаблон формы не грузится ведь через ajax?

        Это передается не в чанк, а в вывод на клиенте. FormIt же выполняется на сервере
        мне кажется ему (integralal ) на клиенте надо просто проставить дефолтовые значения
          Андрей
          07 октября 2014, 09:50
          0
          Спасибо всем за ответы, я решил проблему сам. В форму внедрил поле, и в него передавал значения. Так что вопрос закрыт. Спасибо еще раз всем!
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10