2012-06-25 23 views
0

我正在處理一對錶單字段,直接互相影響。具體來說,我要處理的問題是,我們有數千個用戶可以加入到我一直在努力的網站中。我們正在爲該網站創建一些行政分析表單。部分形式是按組過濾的。使用Drupal 6的形式ahah有一個下拉字段更新第二個下拉字段的值

問題是,大多數人並不知道他們頭頂上的一羣人的名字,只知道他們開頭的名字。所以不是使用自動完成,而是提出了兩個下拉菜單。第一個包含選項A到Z,組名以字母開頭。第二個下拉列表包含以選定字母開頭的所有組。

這個概念很簡單,我們可以用jQuery實現AJAX。但是這會導致驗證錯誤。經過一些研究後,我發現這與Drupal表單緩存有關。解決方案是使用ahah函數。

問題是,迄今爲止我發現的所有指令都是針對指定字段更新自己而不是另一個字段的行爲。所以我想弄清楚如何獲得字母列表來使用ahah更新組列表並使用表單緩存註冊新值。

我發現的一個解決方案是簡單地將頁面中的所有值加載到隱藏的下拉列表中,然後根據需要只加載可見區域中的那些值。但是這樣會產生一堆問題,因爲客戶端幾乎全部使用IE,而且我們看到IE在給予這樣的巨大列表時遇到了窒息。特別是用JavaScript存儲的列表。所以我們需要一個輕量級的解決方案。

有什麼想法?想法?

回答

1

簡而言之AHAH是這樣的:

  • 形式被用空$form_state
  • 當具有#ahah性的元素得到改變一個Ajax調用中指定爲路徑的URL由產生#ahah屬性。
  • 在這個網址回調做到這一點:
    • 檢索從表單緩存中的表單
    • 處理表單
    • 重建與當前$form_state形式,以便它可以基於該
    • 添加/更改元素
    • 的形式放於窗體高速緩存,以避免驗證錯誤
    • 的形式呈現,並返回JSON
  • Drupal用新窗體替換wrapper div的內容。

在你的情況下,你需要讓你的表單生成函數知道在$ form_state中選擇的值。它必須:

  • 生成的字母下拉
  • 查找到$ form_state,看看是否有選擇的信。如果是這樣,請根據所選值生成第二個下拉列表。

該回調函數將執行窗體緩存和重建。

沒有與代碼很好的解釋了這裏的回調函數:

+0

謝謝你對它是如何工作的深入描述。我非常感謝所有的信息和幫助。 – pthurmond

相關問題