Drupal不会让JQuery添加到自定义表单中的选择列表中

时间:2011-05-26 18:52:08

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

我有一个表单,其中包含用户有时需要添加的下拉“select”元素。因此,我添加了一个链接来打开一个Modal Frame表单,创建了Modal Frame表单,并使其_submit()函数将新数据添加到保存select元素选项的表中。然后它将新的ID和名称“返回”到Javascript回调(Modal Frames的方式),并且JS回调将新元素添加到下拉列表中,并使用JQuery使其成为浏览器中当前选定的元素。这一切都很有效。

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

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

我尝试添加:

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

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

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

我还考虑过尝试在“子”形式_submit()函数中将选项添加到“父”表单的缓存版本中,但不知道如何获取“父”表单的form_build_id。此外,这似乎是一个太多的kludge(虽然我可能是错的)。

想法?

2 个答案:

答案 0 :(得分:0)

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

'#DANGEROUS_SKIP_CHECK' => TRUE,

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

答案 1 :(得分:0)

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

http://randyfay.com/ahah