[РЕШЕНО] Form API: не работает #states

Главные вкладки

Аватар пользователя Valery.O Valery.O 20 июня 2012 в 10:55

Решил сделать динамическую форму в файле commerce_payment_example.module.

$form['first_cb'] = array(
  '#type' => 'checkbox',
  '#title' => 'Первый',
);
 
$form['second_cb'] = array(
  '#type' => 'checkbox',
  '#title' => 'Второй',
  '#states' => array(
    'visible' => array(
      ':input[name="first_cb"]' => array('checked' => TRUE)
    ),
  ),
);

В итоге, если "Первый" checkbox отметить, то должен появиться "Второй", а у меня они оба видны, независимо отмечен "Первый" checkbox или нет.
Подскажите, в чем причина?

Комментарии

Аватар пользователя rimen rimen 20 июня 2012 в 14:05

Описано все верно. Проверьте, что name у чекбокса на выходе действительно first_cb, возможно, что в вашем контексте name формируется вместе с parents

Аватар пользователя kosilko kosilko 20 июня 2012 в 14:11

Полтергейст однако. Кстати, двоеточие в ядре не употребляется как оказалось, хотя в примере с двоеточием.
А вообще если не работает - гляньте рабочий код, например в modules/user/user.admin.inc. И в каком контексте формируете эти элементы формы? Если drupal_get_form() проигнорировать, то #states вполне могут пролететь как фанера над Парижем. Не удивлюсь, что может не работать из-за кириллицы в #title, если файл скрипта не в UTF8.

Аватар пользователя rimen rimen 20 июня 2012 в 14:26

Попробуйте прогнать через js debugger какой-нить и посмотреть, какие параметры state приходят на страницу. У меня раз было так, что #id не формировался у элемента (а он нужен для states).
Можете просто поставить #id руками

<?php
$form
['second_cb'] = array(
  
'#type' => 'checkbox',
  
'#id' => 'second_cb',
  
'#title' => 'Второй',
  
'#states' => array(
    
'visible' => array(
      
':input[name="first_cb"]' => array('checked' => TRUE)
    ),
  ),
);
?>
Аватар пользователя Valery.O Valery.O 20 июня 2012 в 15:01

kosilko, rimen - Большое спасибо ребята! С меня помощь по дизайну, если что обращайтесь в личку Smile

Дело было, как оказалось, пустяковое - там присваивались имена родителей:

<?php
$form['second_cb'] = array(
  '#type' => 'checkbox',
  '#title' => 'Второй',
  '#states' => array(
    'visible' => array(
      ':input[name="parent[parent][first_cb]"]' => array('checked' => TRUE)
    ),
  ),
);?>