2011-05-26 36 views
2

我有一個帶有下拉選擇元素的表單,用戶有時需要添加一個「select」元素。所以,我添加了一個鏈接來打開Modal Frame窗體,創建了Modal Frame窗體,並使其_submit()函數將新數據添加到包含select元素選項的表中。然後它將新的ID和名稱返回給Javascript回調(Modal框架的方式),並且JS回調將新元素添加到下拉列表中,並使用JQuery將其作爲瀏覽器中當前選定的元素。這一切都很好。Drupal不會讓JQuery添加到自定義表單中的選擇列表中

最後,用戶提交原始表單,並得到錯誤「已檢測到非法選擇,請與網站管理員聯繫。」

表單構建函數從數據庫中創建選項列表(我選中)包含新選項,所以我猜測Drupal使用表單的緩存版本而不是在它做之前重新構建它自動驗證。如果您返回一頁,然後轉發,新添加的選項就在列表中。

我嘗試添加:

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

一個構建有問題的頁面中的功能,但它並沒有區別。

供參考:如果它很重要,這是多頁表格的一部分。

我也想過試圖將該選項添加到「子」形式_submit()函數的「父」形式的緩存版本,但不知道如何獲取「父」形式的form_build_id 。此外,這似乎太像一個kludge(雖然我可能是錯誤的)。

想法?

回答

0

您提交的表單與表單呈現時間不同,因此Drupal將其視爲惡意輸入。如果您想跳過該惡意檢查,請在your_module_form()函數中將下面的行添加爲表單的屬性。

「#DANGEROUS_SKIP_CHECK」 => TRUE,

這將解決你的問題,但要確保你添加手動驗證的惡意輸入來保護:)。希望這會幫助你。

0

我認爲你最好用Drupal的AHAH函數從回調函數中請求更新的select元素。通過這種方式,緩存的表單在服務器端重建,您不需要添加可怕的DANGEROUS_SKIP_CHECK。以下是Drupal 6的教程:

http://randyfay.com/ahah

相關問題