Вы здесь

Сокрытие select на ajax форме

1

В форме есть select. Форма многошаговая. Разговор идёт не про первый шаг. Данные для #options приходят из переменной.

Задача: Скрыть select если только 1 options. И передать значение форме.

Как пытался решить:

1) В php писал

if (count($options) == 1)

и подсунуть поле с #markup и классом hide. Так конечно можно, но ИМХО велосипед ещё тот.

2) Через js

if ($("select[id=edit] option").size() == 1)

но не могу нормально подгрузить js.

Вызывают js файл через, drupal_add_js в форме-шаге. Ajax обработчик обычный return $form;.

Я так понял из нижеследующего, что подгружаю js файл одновременно с ajax запросом, поэтому самого select ещё как бы нет.

Консоль выдаёт:
Синхронный XMLHttpRequest в основной нити является устаревшим из-за его пагубного влияния на работу конечного пользователя. Для получения дополнительной помощи обратитесь к ...

Версия Drupal: 
7.x
Категория: 
AJAXForm API
Вопрос задан 27.04.2015 - 01:04
Аватар пользователя SAM
SAM
212

Ответы

2
if (count($options) > 1) {
  $form['select'] = array(...);
}
Ответ дан 27.04.2015 - 03:52
Аватар пользователя xandeadx
xandeadx
1542

А как тогда передать #options в сабмит, если он один?

Комментарий оставлен 27.04.2015 - 11:40
  $form['select'] = array(
    ...,
    '#access' => count($options) > 1,
  );
Комментарий оставлен 27.04.2015 - 15:03

В этом случае поле просто скрывается, и после сабмита его значение не попадает в $form_state['values']

Пришлось сделать так (не уверен, что по фен-шую, но работает):

$form['select'] = array(
   ...,
  '#default_value' => key($options),
  '#access' => count($options) > 1,
);
Комментарий оставлен 27.04.2015 - 15:38