我目前有一个带有提交按钮的表单,我希望将其保留为禁用,除非检查其中一组中的任何复选框。目前,无论我做什么,按钮都不会被禁用。这是我正在使用的代码:
$form['enrollments']['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit Change'),
'#states' => array(
'disabled' => array(
'input:checked' => array('length' => 0),
),
);
复选框都以数组形式共享一个耻辱名称,如“students [12345]”。因此,如果选中任何一个“学生”复选框,则应启用该按钮。但是,根据上面的代码,按钮始终处于启用状态。
答案 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],
]
]
];