Dynamically add input field using #ajax As the question says, im not clear on how to go about adding new input fields depending on values of certain fields in the form.

I got as far as setting a callback and a wrapper, but i just can't seem to rebuild the form, i can do basic returns of values from the callback, but that's about it.

If anyone could show me a clean, simple way where i could go from, that would be great!

&lt;?php

//Create raffle form
function raffle_create_form($form, &amp;$form_state)
{

    //Basic raffle info
    $form['raf_raffle_name'] = array(
        '#type' =&gt; "textfield",
        "#prefix" =&gt; "&lt;h5&gt;Raffle information&lt;/h5&gt;&lt;hr&gt;",
        "#title" =&gt; "Raffle Name:",
        "#required" =&gt; TRUE
    );

    $form['raf_allowed_number'] = array(
        '#type' =&gt; "textfield",
        "#title" =&gt; "Number of allowed members",
        "#required" =&gt; TRUE,
        '#element_validate' =&gt; array('element_validate_number')
    );

    $form['raf_start_now'] = array(
        "#type" =&gt; "checkbox",
        "#title" =&gt; "Start raffle now?"
    );

    $form['raf_end_date'] = array(
        "#type" =&gt; "date",
        "#title" =&gt; "When to close this raffle?",
        "#required" =&gt; TRUE
    );

    $form['raf_prize_type'] = array(
        '#type' =&gt; "select",
        "#options" =&gt; array('gift' =&gt; 'Steam Gift', 'hardware' =&gt; 'Gaming peripherals'),
        "#title" =&gt; "Prize type",
        "#ajax" =&gt; array(
            'callback' =&gt; 'raffle_create_form_type_steam',
            'wrapper' =&gt; 'steam_options',
        ),
    );


    if(isset($form_state['values']['raf_prize_type']))
    {
        $form['raf_steam_options'] = array(
            '#type' =&gt; 'textfield',
            '#title' =&gt; 'Added div',
            '#prefix' =&gt; '&lt;div id="steam_options"&gt;',
            '#suffix' =&gt; '&lt;/div&gt;'
        );
        $form['raf_steam_options']['#description'] = 'configure some steamy steam steam';
    }

    $form['raf_prize_name'] = array(
        '#type' =&gt; "textfield",
        "#title" =&gt; "Prize name",
        '#prefix' =&gt; '&lt;div id="steam options"&gt;&lt;/div&gt;',
    );

    $form['raf_prize_about'] = array(
        '#type' =&gt; "textarea",
        "#resizeable" =&gt; true,
        "#title" =&gt; "Prize description"
    );

    $form['raf_prize_thumb'] = array(
        '#type' =&gt; "file",
        "#title" =&gt; "Prize thumbnail"
    );

    $form['raf_prize_link'] = array(
        '#type' =&gt; 'textfield',
        '#title' =&gt; "Link to product"
    );

    $form['raf_raffle_create'] = array(
        '#type' =&gt; 'submit',
        '#value' =&gt; "Create Raffle",
    );

    $form['#submit'][] = 'raffle_create_form_submit';

    return $form;
}

function raffle_create_form_validate($form, &amp;$form_state)
{

}

function raffle_create_form_submit($form, &amp;$form_state)
{
    dsm('i printed');
}

function raffle_create_form_type_steam($form, &amp;$form_state)
{
    dms('hi');
    return $form['raf_steam_options'];
}
You should do something like this

$form['raf_prize_type'] = array(
        '#type' =&gt; "select",
        "#options" =&gt; array('gift' =&gt; 'Steam Gift', 'hardware' =&gt; 'Gaming peripherals'),
        "#title" =&gt; "Prize type",
        "#ajax" =&gt; array(
            'callback' =&gt; 'raffle_create_form_type_steam',
            'wrapper' =&gt; 'steam_options',
            'event' =&gt; 'change',
           'method' =&gt; 'replace',
        ),
    );



$form['raf_prize_name'] = array(
        '#type' =&gt; "textfield",
        "#title" =&gt; "Prize name",
        '#prefix' =&gt; '&lt;div id="steam options"&gt;',
        '#suffix' =&gt; '&lt;/div&gt;'
    );


And your callback function should be

function raffle_create_form_type_steam($form, $form_state){



    return $form['raf_prize_name'];
}