Калькуляторы и формы для сайтов
0 Пользователей и 1 Гость просматривают эту тему.
  • 15 Ответов
  • 2627 Просмотров
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1
Joomla 2.5

Есть необходимость заполнить одно из полей формы некоторым значением в момент отправки формы. Значение берется из php-скрипта, который выполняется после того как юзер нажал кнопку "отправить". По сути нужно осуществить перехват события отправки. Я написал скрипт на jquery, но он не успевает исполнится, потому что у хроноформс похоже собственный обработчик на мутулс, который срабатывает быстрее. Мой скрипт отрабатывает, если в форме были допущены ошибки заполнения и она не отправляется после нажатия на "отправить". Но этот вариант не годится.
Как решить проблему?
« Последнее редактирование: 19.08.2014, 17:09:02 от Zverek »
*

shurakana

  • Завсегдатай
  • 793
  • 43
Сделай чтобы скрипт исполнялся на странице, и поле перед отправкой будет уже с нужным наполнением. Или в обработчике, где идет получение значений name, заполнить нужной информацией из php-скрипта, который выполняется после того как юзер нажал кнопку "отправить".
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1
Сделай чтобы скрипт исполнялся на странице, и поле перед отправкой будет уже с нужным наполнением.

Фишка в том, что значение должно присваиваться именно в момент отправки данных. Значение берется из БД и за время заполнения формы оно там может изменится. Поэтому брать его нужно в последний момент.

Или в обработчике, где идет получение значений name, заполнить нужной информацией из php-скрипта, который выполняется после того как юзер нажал кнопку "отправить".

А где этот обработчик? Это надо менять скрипт самого хроноформса, как я понимаю. Не думаю, что это вариант, поскольку при обновлении компонента мои изменения исчезнут.
*

shurakana

  • Завсегдатай
  • 793
  • 43
Ну, если так обновлять не умеете..
Тогда поточнее, что откуда берется, почему эти данные так часто меняются, и для чего они нужны. Может есть другой вариант решения...
И что это за поле такое в БД которое меняется, и может вставляться в форму..?
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1
форма - заявка на услуги. Каждая заявка имеет номер. Номер формируется из текущей даты и порядкового номера заявки. Чтобы узнать порядковый номер, нужно считать из базы номер предыдущей заявки и увеличить на единицу. Если сформировать поле с номером заявки в момент, когда форма только появляется на странице, то велика вероятность того, что пока юзер будет заполнять заявку, другой юзер заполнит форму, отправит данные и изменит номер последней заявки в БД. Поэтому считывать номер заявки нужно именно в последний момент. То есть когда юзер уже отправляет данные.
*

shurakana

  • Завсегдатай
  • 793
  • 43
очень, и очень тонко..) Есть такой аттрибут для полей БД как AUTO_INCREMENT, благодаря ему у тебя не будут совпадать номера заявок..)))
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1
Дело в том, что каждый год порядковый номер должен обнуляться! То есть, номер растет в пределах одного года. Год кончился - начинаем нумерацию сначала. Поэтому я не могу воспользоваться уникальным id заявки, а должен сделать в БД специальное поле для номера.
*

shurakana

  • Завсегдатай
  • 793
  • 43
Зачем это, вручную считать будешь чтоли?)
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1
Не я придумывал ТЗ :)

В любом случае, по id я считаю номер или формирую его в отдельном поле, мне этот номер нужно передавать в форму, потому что номер заявки должен быть в письме, которое получает сотрудник фирмы вместе с остальными заполненными полями.
*

shurakana

  • Завсегдатай
  • 793
  • 43
Я написал скрипт на jquery, но он не успевает исполнится, потому что у хроноформс похоже собственный обработчик на мутулс, который срабатывает быстрее.
Опа, что-то я этого сразу не заметил...  :o

Скрипт в студию, ща ускорим его..!
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1
Да обычный перехватчик.

Код
$('#myform').submit(function(){
$.post("zayavka.php", function(response)
{
 $('#number').val(response);

});    
});


number - id текстового поля, в которое вставляется номер заявки
zayavka.php - скрипт запроса номера предыдущей заявки из БД и формирования нового номера

Вот если я жму на "отправить" не заполнив какого-то обязательного поля, то данный перехватчик срабатывает - записывает номер заявки в нужное поле и потом при повторной отправке данных (когда все обязательные поля заполнены) передает это значение в БД и в письмо.
Но если форма сразу заполнена верно, то обработчик не срабатывает. Как будто его нет вовсе. Ставил return false; не помогает.. алерты выводил внутри обработчика - ничего не работает, если ошибок в форме нет. Она просто уходит и все. Без нужного поля.

Насчет того, что в хроноформс обработчик на mootools  и он срабатывает быстрее моего - это лишь предположение. Я не знаю как на самом деле работает форма.
« Последнее редактирование: 18.08.2014, 14:42:39 от Zverek »
*

shurakana

  • Завсегдатай
  • 793
  • 43
Все, пошутили и хватит.. письмо отправляется только после того как в БД добавлены данные, в итоге получается, что после запроса на сохранение новой заявки INSERT, но, до функции отправки письма, нужно создать запрос SELECT, и выбрать все необходимые поля, для отправки в письме.
файл zayavka.php скиньте тоже, возможно проблема в нем..
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1


Цитировать
в итоге получается, что после запроса на сохранение новой заявки INSERT, но, до функции отправки письма, нужно создать запрос SELECT, и выбрать все необходимые поля, для отправки в письме.
Не уловил мысль. Это все делает хроноформс. Зачем нам вмешиваться в этот процесс?  На мой взгляд достаточно, что номер последней заявки мы считаем в момент отправки данных. тут же сформируем новый номер и скормим его хроноформсу.
Скрипт заявки ниже, но он выполняет поставленную перед ним цель. Он рабочий.

номер выглядит так: 12_08_14, где 12 - номер заявки по порядку. 08_14 - текущий месяц и год
В поле БД `number` заявка в таком виде и хранится: 12_08_14. Следующий код считывает номер последней заявки, парсит его, и формирует новый.
Код
$sql = "SELECT number FROM `g5x4u_zayavka` ORDER BY `cf_id` DESC LIMIT 1";
$db->setQuery($sql);
$data_row = $db->loadRow();
$new_number='1';
if($data_row!='')
{
$explode=explode('_',$data_row[0]);

$old_year=$explode[2];
$new_number= ($old_year==date('y'))? $explode[0]+1 : 1;

}

$all_number=$new_number.'_'.date('m').'_'.date('y');
echo $all_number;

*

shurakana

  • Завсегдатай
  • 793
  • 43
Цитировать
Зачем нам вмешиваться в этот процесс?  На мой взгляд достаточно, что номер последней заявки мы считаем в момент отправки данных.

Извините, связь прервалась... я сдаюсь..)
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1
На самом деле у меня просто неверно был написан перехватчик события отправки (ошибку разъяснили на другом форуме). Mootools  тут вообще не при делах, поскольку он отвечает только за валидацию формы. Далее форма уходит на обработку стандартным путем. И при корректном перехватчике моя задача решается элементарно.
Вот правильный скрипт перехватчика (не думаю, что кому-то надо будет так заморачиваться, но вдруг...)

Код
$('#myform').submit(function(e, force)
{
    if(!force)
   {
       e.preventDefault();    
       $.post("zayavka.php", function(response)
       {
   $('#number').val(response);
            $('#myform').trigger('submit','true');
        });  
   }

});


То есть вся эта тема к ChronoForms вообще говоря мало отношения имеет. Знание JQuery и ничего больше.
« Последнее редактирование: 20.08.2014, 09:51:44 от Zverek »
*

МихаилМ

  • Осваиваюсь на форуме
  • 58
  • 2
Вот правильный скрипт перехватчика (не думаю, что кому-то надо будет так заморачиваться, но вдруг...)

Код
$('#myform').submit(function(e, force)
{
    if(!force)
   {
       e.preventDefault();   
       $.post("zayavka.php", function(response)
       {
    $('#number').val(response);
            $('#myform').trigger('submit','true');
        });   
   }

});



Друг! У тебя там бесконечный цикл получается в скрипте. На субмит
Код
$('#myform').submit(function(e, force)
ты запускаешь операции, которые запускают эту же функцию опять
Код
$('#myform').trigger('submit','true');
Тут правильно делать обработчик событий на кнопку в форме
Код
$('#какая-то кнопка внутри формы').click(function() {});	
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Предел для добавления полей формы

Автор krigan

Ответов: 2
Просмотров: 413
Последний ответ 19.09.2017, 22:53:48
от Heartflight
Странное поведение ChronoForms 5 на J2.5

Автор ORTODOX

Ответов: 0
Просмотров: 347
Последний ответ 20.07.2017, 15:56:49
от ORTODOX
Прикрепить файл в ChronoForms 5

Автор tsimba

Ответов: 21
Просмотров: 5751
Последний ответ 14.07.2017, 12:18:52
от denverkurt
ChronoForms textarea box size на шаблоне yootheme

Автор tao2en

Ответов: 1
Просмотров: 478
Последний ответ 11.07.2017, 00:18:38
от Sonate
Где меняется e-mail полей from и to в ChronoForms v6?

Автор Igoritaly

Ответов: 4
Просмотров: 198
Последний ответ 03.07.2017, 08:52:49
от vipiusss