【问题标题】:drupal 7 states, set disabled unless any checkbox in a group is checkeddrupal 7 状态,除非选中组中的任何复选框,否则设置为禁用
【发布时间】:2016-06-06 18:27:37
【问题描述】:

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

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

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

【问题讨论】:

  • 尝试使用javascript/jquery

标签: drupal-7 drupal-forms


【解决方案1】:

我有一个类似的问题,只是想出了一个使用复选框并提交的 Drupal 8 表单。这同样适用于 Drupal 7 表单,尽管 [] 的数组定义可能需要更新为 array()。

我的复选框,其中我有 8 个,不共享一个明确的通用名称,因此为了在不添加 8 个唯一行 :input[name="..."] 的情况下完成此操作,我只是为复选框项目添加了一个通用数据属性,我可以然后使用 #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],
        ]
      ]
    ];

【讨论】:

  • 也可以检查输入名称是否以“node_types[”开头:':input[name^="node_types["]'
【解决方案2】:

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

另外,如果你想在复选框可见时显示一些东西,你可以使用它:

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

【讨论】:

    【解决方案3】:

    这对我有用...

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

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2014-06-02
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      相关资源
      最近更新 更多