2013-11-21 64 views
0

美好的一天。 我創建自定義表單我的模塊中定義的提交按鈕這樣的:Drupal ajax表單,部分呈現

$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
    '#ajax' => array(
     'callback' => 'fmg_addbanner_ajax_callback', 
     'method' => 'replace', 
     'wrapper' => 'banner_add_wrapper' 
    ) 
); 

然後輸出我的形式是這樣的:

$form = drupal_get_form('fmg_banner_add_form', $region_id); 
print render($form); 

但是Ajax請求不起作用。我想因爲沒有需要的drupal js文件。我怎麼解決這個問題?謝謝。

+0

您可以添加您的完整表單定義和'fmg_addbanner_ajax_callback'的實現,這樣我們可以進一步幫助您... –

回答

0

正常情況下,將有#ajax連接到一個共同的輸入,像複選框,文本框等

行爲是當用戶改變輸入值,它會通過Ajax火回調和發送整個表單,然後您可以在場景後面處理此表單,並在發送表單並將元素更改爲您定義的包裝器之前調整某些內容。

我對部分表單呈現的問題之一是當我需要做一些Ajax調用或者在頁面的某個區域注入部分表單元素的同時保持表單呈現的完整性。 (我不知道到底是什麼形式的構建做了做,我想我也不想知道)

由於形式渲染使用渲染陣列,如果你只是想提取某些元素,你可以只是做

$form = drupal_get_form('application_form'); 
$body = render($form['body']); 

以下是一個真正的例子,我採取了一種形式,並分割成頁眉,頁腳和其餘的表單元素。

// get a form for updating application info. 
$form = drupal_get_form('pgh_awards_review_application_form', $app); 
$elements = array(); 
$form_render = render($form); 
$elements = array(
    'qualify' => render($form['qualify']), 
    'threshold_met' => render($form['threshold_met']), 
    'submit' => render($form['submit']), 
); 
if (preg_match('/<form.+div>/', $form_render, $matches)) { 
    $elements['header'] = $matches[0]; 
} 
if (preg_match('/<input type="hidden".+form>/s', $form_render, $matches)) { 
    $elements['footer'] = $matches[0]; 
} 
$vars['form'] = $elements; 

這絕對不是漂亮的辦法,它只是起到此刻的需求。