drupal 7状态,除非选中组中的任何复选框,否则设置为禁用

时间:2016-06-06 18:27:37

标签: drupal-7 drupal-forms

我目前有一个带有提交按钮的表单,我希望将其保留为禁用,除非检查其中一组中的任何复选框。目前,无论我做什么,按钮都不会被禁用。这是我正在使用的代码:

$form['enrollments']['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Submit Change'),
      '#states' => array(
      'disabled' => array(
           'input:checked' => array('length' => 0),
      ),
 );

复选框都以数组形式共享一个耻辱名称,如“students [12345]”。因此,如果选中任何一个“学生”复选框,则应启用该按钮。但是,根据上面的代码,按钮始终处于启用状态。

3 个答案:

答案 0 :(得分:0)

我认为此链接可以解决您的问题: https://www.lullabot.com/articles/form-api-states

此外,如果您希望在复选框可见时显示某些内容,则可以使用此选项:

'#states' => array(
  'visible' => array(
    ':input[name="nameofselectororfield"]' => array('checked' => TRUE),
  ),
),

答案 1 :(得分:0)

这对我有用......

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
    '#states' => array(
      'disabled' => array(
       ':input[name="student12345"]' => array('checked' => FALSE),
      ),
    ),
  );

答案 2 :(得分:0)

我有一个类似的问题,只是使用复选框并提交了Drupal 8表单。尽管可能需要将[]的数组定义更新为array(),但对于Drupal 7表单也应如此。

我的复选框有8个,它们没有共享明确的通用名称,因此,为了在不添加:input[name="..."]的8个唯一行的情况下完成此操作,我只是向复选框项目添加了一个通用的data属性然后,我可以使用#states选择器定位。

我还添加了#required => TRUE,以防某种形式的表单被提交而没有选择任何选项。这将导致页面刷新,并在选中复选框时突出显示错误,表明需要进行选择。

    $form['node_types'] = [
      '#type' => 'checkboxes',
      '#title' => $this->t('Select content types for report.'),
      '#title_display' => 'invisible',
      '#options' => $options,
      '#default_value' => array_keys($options),
      '#attributes' => [
        'data-type' => ['node-type-checkbox']
      ],
      '#required' => TRUE
    ];

    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Download'),
      '#button_type' => 'primary',
      '#states' => [
        'disabled' => [
          ':input[data-type="node-type-checkbox"]' => ['checked' => false],
        ]
      ]
    ];