web-dev-qa-db-ja.com

複数のフィールドを追加するためにajaxでボタン「追加」を追加する方法は?

私はこのコードを書いた複数のフィールドを追加するために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
}
1
Salaktarus

フォーム関数で、キーの下にテキストフィールドをグループ化し、独自のキーを定義できます。ここでは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'];
}
1
Jimmy Ko

上記のようにまだこの問題が発生する場合は、ボタンの種類を送信に変更してください。 $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 ), );

0