【问题标题】:Drupal won't let JQuery add to a select list in a custom formDrupal 不会让 JQuery 添加到自定义表单中的选择列表中
【发布时间】:2011-05-26 18:52:07
【问题描述】:

我有一个带有下拉“选择”元素的表单,用户有时需要添加该元素。因此,我添加了一个打开模态框架表单的链接,创建了模态框架表单,并使其 _submit() 函数将新数据添加到包含选择元素选项的表中。然后它将新 ID 和名称“返回”给 Javascript 回调(模态框架的方式),JS 回调将新元素添加到下拉列表中,并使用 JQuery 使其成为浏览器中当前选择的元素。这一切都很好。

最后,用户提交原始表单,报错“检测到非法选择,请联系网站管理员。”

表单构建函数从数据库创建选项列表,(我检查过)确实包含新选项,所以我猜测 Drupal 正在使用表单的缓存版本,而不是在它执行之前重新构建它自动验证。如果你返回一页,然后向前,新添加的选项就在列表中。

我尝试添加:

global $GLOBALS;
$GLOBALS['conf']['cache'] = FALSE;

到构建有问题的页面的函数,但没有区别。

仅供参考:如果重要的话,这是多页表单的一部分。

我也想过尝试在“子”表单_submit()函数中将选项添加到“父”表单的缓存版本,但不知道如何获取“父”表单的form_build_id。此外,这似乎太过分了(尽管我可能错了)。

想法?

【问题讨论】:

    标签: drupal drupal-6 drupal-modules drupal-fapi


    【解决方案1】:

    您提交的表单与表单呈现的时间不同,因此 Drupal 将其视为恶意输入。如果您想跳过该恶意检查,请在 your_module_form() 函数中添加以下行作为表单的属性。

    '#DANGEROUS_SKIP_CHECK' => 正确,

    这将解决您的问题,但请确保您添加手动验证以防止恶意输入 :)。希望这会对你有所帮助。

    【讨论】:

      【解决方案2】:

      我认为您最好使用 Drupal 的 AHAH 函数从回调函数请求更新的选择元素。这样缓存的表单在服务器端重建,你不需要添加可怕的 DANGEROUS_SKIP_CHECK。这是 Drupal 6 的教程:

      http://randyfay.com/ahah

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-02
        相关资源
        最近更新 更多