Drupal不会让JQuery以自定义形式添加到选择列表

问题描述

|| 我有一个带有下拉\'select \'元素的表单,用户有时需要将其添加到表单中。因此,我添加一个链接以打开“模态框架”表单,创建了“模态框架”表单,并使它的_submit()函数将新数据添加到包含select元素选项的表中。然后,它将新的ID和名称“返回”给Javascript回调(模态框架这样做),然后JS回调将新元素添加到下拉列表中,并使其成为浏览器中当前选定的元素(使用JQuery)。这一切都很好。 最后,用户提交原始表单,并收到错误消息“检测到非法选择。请与站点管理员联系。” 表单构建功能数据库中创建选项列表,(我检查过)确实包含新选项,因此我猜测Drupal正在使用表单的缓存版本,而不是在自动验证之前重新构建它。如果返回上一页,然后再前进,列表中将显示添加的选项。 我尝试添加
global $GLOBALS;
$GLOBALS[\'conf\'][\'cache\'] = FALSE;
到构建有问题的页面功能,但没有什么区别。 仅供参考:如果需要的话,这是多页表格的一部分。 我还考虑过尝试将选项添加到\“ child \”表单_submit()函数中\“ parent \”表单的缓存版本中,但是不知道如何获取\“ parent”的form_build_id \“形式。此外,这似乎太过分了(尽管对此我可能是错的)。 有想法吗?     

解决方法

您提交的表单与表单呈现时间不同,因此Drupal将其视为恶意输入。如果要跳过该恶意检查,请在your_module_form()函数中将以下行添加为表单的属性。 \'#DANGEROUS_SKIP_CHECK \'=>是, 这将解决您的问题,但请确保您要添加手动验证以防止恶意输入:)。希望这会帮助你。     ,我认为您最好使用Drupal的AHAH函数从回调函数中请求更新的select元素。这样,缓存的表单将在服务器端重建,您无需添加可怕的DANGEROUS_SKIP_CHECK。这是Drupal 6的教程: http://randyfay.com/ahah