Пример отправки веб-формы webform_client_form_123
с помощью AJAX:
/**
* Implements hook_form_FORM_ID_alter(): webform_client_form_123.
*/
function mymodule_form_webform_client_form_123_alter(&$form, &$form_state) {
$form['actions']['submit']['#ajax'] = array(
'callback' => 'mymodule_form_webform_client_form_ajax_submit',
'wrapper' => $form['#id'],
);
// Удаляем #pre_render, иначе не будет работать ajax
unset($form['actions']['submit']['#pre_render']);
}
/**
* Ajax submit.
*/
function mymodule_form_webform_client_form_ajax_submit($form, &$form_state) {
if (form_get_errors()) {
return $form;
}
else {
$webform = $form['#node']->webform;
return check_markup($webform['confirmation'], $webform['confirmation_format']);
}
}
Есть и соответствующий модуль.
Добавлено 03.03.2015
Способ аяксифицировать все веб-формы открывающиеся в модуле Auto-Dialog:
/**
* Implements hook_form_BASE_FORM_ID_alter(): webform_client_form.
*/
function MODULENAME_form_webform_client_form_alter(&$form, &$form_state) {
if ($form['#action'] == base_path() . 'system/ajax' || _autodialog_check_request()) {
$form['actions']['submit']['#ajax'] = array(
'callback' => 'MODULENAME_form_webform_client_form_ajax_submit',
'wrapper' => $form['#id'],
);
unset($form['actions']['submit']['#pre_render']);
}
}
/**
* Ajax submit.
*/
function MODULENAME_form_webform_client_form_ajax_submit($form, &$form_state) {
if (form_get_errors()) {
return $form;
}
else {
$webform = $form['#node']->webform;
return check_markup($webform['confirmation'], $webform['confirmation_format']);
}
}
Написанное актуально для
Webform 4
Похожие записи
- Показать второй шаг многошаговой формы в модальном окне
- Навесить на элемент managed_file свой ajax callback (Как обновить всю форму при загрузки файла в managed_file)
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
- Как выполнять свой js-код до или после любых AJAX запросов (изменение работы AJAX API)
- AJAX в форме корзины Commerce 2
Комментарии
А можно ли как-нибудь узнать, что запрос завершён верно и очистить форму или показать подтверждение?
ознакомиться с 10-ю строчками кода выше например
Я, видимо, совсем идиот. Я нашёл вот это: http://xandeadx.ru/blog/drupal/753 и уже ожидал ответ про эту статью, но ваш ответ мне вообще непонятен. Ничего же не вызывается.
что?
Я пытаюсь сказать: как скриптом узнать, что форма успешно отправлена, если отправлять её вышеуказанным способом?
После сабмита на экране вообще ничего не происходит, крутится лоадер и всё. Даже форма не моргает. Но отправляется.
каким скриптом?
что-то не так делаете
Воспользуюсь webform ajax модулем, спасибо. Примеры или несовместимы с Webform 4.7, или с моим набором модулей.
webform_client_form_123 у меня ваш модуль то раньше давал сообщение о сабмите, теперь показывает текст поля Пояснение, вместо сообщения о сабмите.
видимо, после добавления этого поля описания формы ваш модуль стал его показывать вместо сообщения о завершении
хотя нормально работает, просто не было добавлено сообщение о сабмите в настройках формы.
еще можно было бы придумать как скрыть поле Пояснение в форме (текстовая область на полями). а так все отлично работает!
более того, я добавил такую опцию для всех форм, изменив название модуля на
mymodule_form_webform_client_form_alter
а если сообщение об отправке не заполнено, как тогда вызвать в вашем модуле стандартное сообщение модуля Wtbform что данные получены?
Не подскажите как очистить форму, в случае когда
if (form_get_errors()) {
return $form;
}
else {
return $form;
}
Нужен возрат формы, только с пустыми полями.
Попробуйте перед возвращением формы пройтись по ее элементам и установить
#default_value
вNULL
:Добавить комментарий