按下按钮后添加动态表单域

I have a form with a simple button $builder->add('language_switcher', ButtonType::class); which should simply, if pressed, add another field. To do that, I used Symfony's cookbook http://symfony.com/doc/current/form/dynamic_form_modification.html

$builder
    ->get('language_switcher')
    ->addEventListener(
        FormEvents::POST_SUBMIT,
        function () use ($builder, $options) {
            $preparedOptions = $this->prepareOptions($options['data']['productCustomizations']);
            $builder->add('lang_switcher'), ChoiceType::class, $preparedOptions);

        }
    );

When now submitting it via AJAX

<script>
    var $button = $('#xyz');

    $button.click(function() {
        var $form = $(this).closest('form');
        $.ajax({
            url: $form.attr('action'),
            type: $form.attr('method'),
            success: function(html) {
                console.log(html);
                $('#xyz').replaceWith($(html).find('#lang_switcher'));
            }
        });
    });
</script>

I'm getting the error Buttons do not support event listeners. So I tried it out with a hidden field. I added the hidden field to the Form, set the EventListener to it, and added this data to my AJAX request

data[$('#id_of_hidden_field').attr('name')] = 1;

However this did nothing. The example in the cockbook is after submitting a choice field so I don't know how to adapt it to my needs. I couldn't use a SubmitType, because then it would submit the form, right? I just want to have it with a simple button.

The problem is, that, when I do a console.log(html) I don't see the new html element, so it seems like I'm not getting to the EventListener which is weird, because if I dump contents inside the listener I'm getting some data. It just seems like I'm not getting it inside the response

Ok, got it. The problem was that I used the builder inside the POST_SUBMIT event but I had to use a FormInterface. Since I couldn't add it AFTER submit I had to buy the same callback function as in Symfony's cookbook

$formModifier = function (FormInterface $form, $preparedOptions) {
    $form->add($this->childIdentifier, ChoiceType::class, $preparedOptions);
};

And then the listener is built like this

$builder
    ->get('lang_switcher')
    ->addEventListener(
        FormEvents::POST_SUBMIT,
        function (FormEvent $event) use ($formModifier, $options) {
            $preparedOptions = $this->prepareOptions($options);
            $formModifier($event->getForm()->getParent(), $preparedOptions);
        }
    );
    <script type="text/javascript">
    function inputBtn(){
    var input=document.createElement('input');
    input.type="file";
    input.name="img[]";
    input.multiple="multiple";
    //without this next line, you'll get nuthin' on the display
    document.getElementById('target_div').appendChild(input);
}
</script>

<button id="ifile" onclick="inputBtn();">create</button>
<form action="test.php" method="post" enctype="multipart/form-data">
<div id="target_div"></div>
<input type="submit">
</form>