0

我正在研究一对直接相互影响的表单域。具体来说,我正在处理的问题是我们有成千上万的用户可以加入这个我一直在努力的网站上。我们正在为该站点创建一些管理分析表单。这些表单的一部分是按组过滤。

问题是大多数人不知道他们头顶上的一个组的名称,只知道它的开头。因此,我们没有使用自动完成功能,而是提出了两个下拉菜单。第一个包含选项 A 到 Z,即组名开头的字母。第二个下拉列表包含以所选字母开头的所有组。

这个概念很简单,我们可以很容易地用 jQuery 实现 AJAX。但这会导致验证错误。经过一些研究,我发现这与 Drupal 表单缓存有关。解决方案是使用 ahah 函数。

问题在于,到目前为止,我发现的所有指令都是针对指定字段更新本身而不是另一个字段的啊哈动作。因此,我试图弄清楚如何获取字母列表以使用 ahah 更新组列表并将新值注册到表单缓存中。

我发现的一种解决方案是简单地将页面上的所有值加载到隐藏的下拉列表中,然后根据需要将集合中的值加载到可见的下拉列表中。但这会产生很多问题,因为客户端几乎只使用 IE,而且我们已经看到 IE 在给定如此庞大的列表时会阻塞。尤其是存储在 JavaScript 中的列表。所以我们需要一个轻量级的解决方案。

有什么想法吗?想法?

4

2 回答 2

1

简而言之,AHAH 是这样工作的:

  • 表单生成为空$form_state
  • 当具有该#ahah属性的元素发生更改时,将对属性中指定为路径的 url 进行 ajax 调用#ahah
  • 该网址的回调执行以下操作:
    • 从表单缓存中检索表单
    • 处理表格
    • 用电流重建表单,$form_state以便它可以基于它添加/更改元素
    • 将表单放入表单缓存以避免验证错误
    • 表单以 JSON 格式呈现并返回
  • Drupal 将包装器 div 的内容替换为新表单。

在您的情况下,您需要让表单生成函数知道在 $form_state 中选择的值。它必须:

  • 生成字母下拉菜单
  • 查看 $form_state 并查看是否选择了一个字母。如果是这样,请根据所选值生成第二个下拉列表。

回调函数将实现表单缓存和重建。

回调函数的代码在这里有很好的解释:

于 2012-06-29T22:04:57.570 回答
0

我实际上在另一个 StackExchange 网站上得到了答案。他使用示例模块提出解决方案的建议非常有效。

解决方案在这里找到:https ://drupal.stackexchange.com/questions/35048/using-drupal-6s-form-ahah-to-have-one-dropdown-field-update-the-values-of-a-sec

于 2012-07-01T21:58:17.510 回答