Drupal表单验证:检测到非法选择

时间:2012-05-07 09:54:09

标签: ajax forms drupal drupal-6

我在验证Drupal 6表单时遇到问题。

我有2个下拉菜单。第二个下拉列表(项目)的选项取决于第一个下拉列表(客户端)的选定选项。 更改客户端时,我从该客户端获得所有项目。

现在,在验证表单时,选择了另一个客户端作为default_value,项目的选项与表单构建中的选项不同。这意味着,项目的选定选项不在为表单构建的选项数组中。

是否有任何方法可以更改选项数组以进行表单验证? 验证中项目的选项数组是根据客户端的选择构建的吗?

2 个答案:

答案 0 :(得分:2)

这里要认识到的主要事情是,您的表单构建功能不仅在初始表单构建时调用一次,而且在表单提交时再次调用,在验证发生之前。因此,您可以调整表单构建函数,以便为项目选择字段构建不同的$options数组,具体取决于所选的客户端(如果已选择)。

你可以通过检查$form_state['values']来做到这一点,有点像这样:

function your_form(&$form_state) {
  // ... other form building stuff
  // Start with initial default options for project select
  $project_options = array('- Please select client first -');
  // Adjust, if client already selected
  if (isset($form_state['values']) && $form_state['values']['your_client_select']) {
    $selected_client = $form_state['values']['your_client_select'];
    $project_options = your_function_to_build_project_options_by_client($selected_client);
  }
  // ... build project select using those options
  // ... other form building stuff
}

答案 1 :(得分:0)

您无需编码即可完成此操作。有一个名为Conditional fields的模块。此模块允许您为表单设置规则。根据某些字段的某些值隐藏某些元素。