Ничего из этого не работает для меня.Ajax-функция отправки формы по-прежнему просто вызывает функцию обратного вызова напрямую, минуя валидацию, отправку, а также делая так, чтобы кнопку нельзя было нажимать несколько раз.Сообщения проверки не отображаются.Я буквально скопировал и вставил код Джошуа Стюардсона, и он не сработал.
Тот факт, что этот пример использования является настолько сложным и недокументированным, очень огорчает.Мне кажется, это самый простой из запросов на API формы AJAX.Ладно, закончили израсходовать мое разочарование на решение.
Вот что я в итоге сделал, чтобы заставить это работать.Он чувствует себя хакером и отсталым.Он также сломается, если на одной странице будет несколько экземпляров формы, но это было лучшее, что я мог сделать.Если кто-то может пролить свет на это, ПОЖАЛУЙСТА, сделайте!
По сути, вы должны заменить всю форму внутри себя внутри вашего обратного вызова и вручную добавить любые установленные сообщения к объекту формы.Сделайте это, объявив обертку идентификатором вашей формы (она сломается, если на одной странице будет несколько экземпляров формы, потому что идентификатор будет обновлен).
function productsearchbar_savesearch_form($form, &$form_state) {
$form["wrapper"] = array("#markup" => "<div class='inline-messages'></div>");
$form["name"] = array(
"#type" => "textfield",
"#required" => true,
"#title" => "Name"
);
$form["submit"] = array(
"#type" => "submit",
"#value" => "Send",
"#ajax" => array(
"callback" => "productsearchbar_savesearch_form_callback",
"wrapper" => "productsearchbar-savesearch-form",
"effect" => "fade"
)
);
return $form;
}
function productsearchbar_savesearch_form_callback($form, &$form_state) {
$messages = theme('status_messages');
if($messages){
$form["wrapper"] = array("#markup" => "<div class='inline-messages'>$messages</div>");
}
return $form;
}
function productsearchbar_savesearch_form_validate($form, &$form_state) {
if ($form_state['values']['name'] == '') {
form_set_error('', t('Name field is empty!'));
}
}
function productsearchbar_savesearch_form_submit($form, &$form_state) {
drupal_set_message(t('Your form has been saved.'));
}