Ничего из этого не работает для меня. Функция 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.'));
}
person
Brent Hartmann
schedule
11.12.2012
#limit_validation_errors
). Кроме того, сообщения об ошибках автоматически загружаются в элементwrapper
по умолчанию, поэтому, как только вы исправите первый бит, он должен встать на место. Не могли бы вы опубликовать еще немного своего кода? - person Clive   schedule 26.10.2011