使用Drupal 6的形式ahah让一个下拉字段更新第二个下拉字段的值

时间:2012-06-25 16:22:22

标签: php javascript drupal drupal-6 drupal-modules

我正在处理一对彼此直接影响的表单字段。特别是我正在处理的问题是,我们有数千个用户可以加入我在网站上加入的群组。我们正在为该网站创建一些管理分析表单。这些表单的一部分是按组过滤。

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

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

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

我发现的一个解决方案是在隐藏的下拉列表中简单地加载页面上的所有值,然后根据需要加载可见的一组中的值。但是这会产生一系列问题,因为客户端几乎只使用IE浏览器,而且当给出类似这样的大型列表时,我们已经看到IE会出现问题。特别是使用JavaScript存储的列表。所以我们需要一个轻量级的解决方案。

有什么想法?想法?

2 个答案:

答案 0 :(得分:1)

简而言之,AHAH的工作原理如下:

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

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

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

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

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

答案 1 :(得分:0)

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

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