2012-06-14 53 views
2

我正在使用Drupal 7字段API通過AJAX重新加載部分表單。我有一個按鈕可以進行通話,但是我想刪除它並以編程方式進行通話作爲對特定事件的響應。這裏是我的AJAX按鈕的代碼:Drupal 7 Field API:如何以編程方式發送表單元素的#ajax屬性中指定的AJAX請求?

$form['documents']['reload_document_list_button'] = array(
    '#type' => 'button', 
    '#value' => 'Обновить список документов', 
    '#ajax' => array(
    'callback' => 'reload_document_list', 
    'wrapper' => 'document-list', 
    'method' => 'replace', 
), 
); 

(見http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#ajax瞭解詳細信息)有沒有辦法做到這一點?

P.S.我知道我可以設置按鈕的樣式,使其不可見,並觸發'點擊'事件,但我正在尋找一種更好的方式來做到這一點。

回答

6

有兩種方法可以做到這一點,我認爲:

首先,你可能已經閱讀#ajax屬性接受一個event關鍵。對於默認按鈕元素,此事件爲mousedown。 (您可以檢查它here)您可以將其更改爲自定義事件,例如customEvent,並從您的Javascript代碼觸發此自定義事件爲jQuery('#button-id').trigger('customEvent');

或者,您可以查看#ajax屬性本身。設置AJAX端點(使用hook_menu)並設置reload_document_list作爲其回調。添加自定義Javascript來發出請求並處理響應。你可以看看Drupal發送AJAX請求的方式,當你使用#ajaxmisc/ajax.js並且如果你願意的話可以用它作爲參考。

+0

Amar,謝謝你的回覆!現在我決定使用第一個建議,但不是創建自定義事件,而是觸發'mousedown'事件。至於第二個建議,是的,這是可能的,我知道如何去做,但我希望儘可能地接近Drupal Form API框架,包括它的Javascript部分,但不幸的是,它根本沒有記錄。這就是爲什麼我更喜歡第一種解決方案。 – bandolero

+1

這解決了我遇到的問題,非常感謝!我試圖通過觸發按鈕上的單擊事件來觸發Ajax調用,但沒有發生任何事情。將它更改爲mousedown是一種享受。 –