私はこのコードを書いた複数のフィールドを追加するためにajaxで「追加」ボタンを追加したいのですが、「さらに追加」をクリックして何も機能しないのになぜ解決策がないのかわかりません。
これは私のコードです:
function produits_add($form, &$form_submit){
if(!isset($form_state['num_names'])){
$form_state['num_names']=1;
}
// Create wrapper for ajax
$form['#prefix'] = '<div id="form-wrapper">';
$form['#suffix'] = '</div>';
for ($i = 0; $i < $form_state['num_names']; $i++) {
$form['name_' . $i] = array(
'#type' => 'textfield',
'#title' => t('Name')
);
}
$form['add_button']= array(
'#type' => 'button',
'#value'=> 'Add more',
'#ajax' => array(
'callback' => 'ajax_add_col',
'method' => 'replace',
'effect' => 'fade',
'wrapper' => 'form-wrapper',
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
'#submit' => array('produits_add_submit'),
);
return $form;
}
function ajax_add_col($form, &$form_state){
$form_state['num_names']++;
// rebuild whole form with new values
$form_state['rebuild'] = true;
}
function produits_add_submit($form, &$form_state){
// Some code
}
フォーム関数で、キーの下にテキストフィールドをグループ化し、独自のキーを定義できます。ここではgroup
を使用しています。
// Create wrapper for ajax
$form['group']['#prefix'] = '<div id="form-wrapper">';
$form['group']['#suffix'] = '</div>';
for ($i = 0; $i < $form_state['num_names']; $i++) {
$form['group']['name_' . $i] = array(
'#type' => 'textfield',
'#title' => t('Name')
);
}
Ajaxコールバックで、フォームの一部を返します。
function ajax_add_col($form, &$form_state){
$form_state['num_names']++;
// rebuild whole form with new values
$form_state['rebuild'] = true;
return $form['group'];
}
上記のようにまだこの問題が発生する場合は、ボタンの種類を送信に変更してください。 $form['add_button']= array( '#type' => 'button', '#value'=> 'Add more', '#ajax' => array( 'callback' => 'ajax_add_col', 'method' => 'replace', 'effect' => 'fade', 'wrapper' => 'form-wrapper', ), );
$form['add_button']= array( '#type' => 'submit', //change this submit '#value'=> 'Add more', '#submit' => array('ajax_example_add_more_add_one'),//add this to handle //your increment and rebuild form '#ajax' => array( 'callback' => 'ajax_add_col', 'wrapper' => 'form-wrapper',//returns the fieldset ), );