К содержанию

передача данных из 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
3 261
Реклама

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

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

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

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

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

    На javascript ты можешь поменять только значения отправляемой юзером формы. После отправки формы javascript нету.
      Андрей
      Андрей Старожил
      07 октября 2014, 08:48
      Делал до этого бегунки, которые получали определенное значение в 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
        Это передается не в чанк, а в вывод на клиенте. FormIt же выполняется на сервере, т.е. про какие-бы то ни было джаваскрипты, тем более подключенные в шапке сайта, он знать не может. Чтобы формит знал данные, ему нужно передать их с помощью POST запроса, хоть как обычной отправкой формы, хоть с помощью джаваскрипта. И тогда в чанке handlerTpl нужно написать
        <dd><span class="kol_vo_comps">[[+kol_vo_comps]]</span></dd>
        и так далее. Сниппет FormIt обработает этот чанк, просто подставив полученные от клиента через POST данные и отправит вывод на почту.
          Василий Наумкин
          Василий Наумкин Администратор
          07 октября 2014, 09:45
          Еще раз, если сразу не понятно.

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

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

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