我有一个带有简单按钮$builder->add('language_switcher', ButtonType::class);
的表单,只需按下该按钮即可添加另一个字段。为此,我使用了Symfony的食谱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);
}
);
现在通过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>
我收到错误Buttons do not support event listeners.
所以我尝试了隐藏的字段。我将隐藏字段添加到表单,将EventListener
设置为它,并将此data
添加到我的AJAX
请求
data[$('#id_of_hidden_field').attr('name')] = 1;
然而,这没有任何作用。 cockbook中的示例是在提交选择字段之后,因此我不知道如何使其适应我的需求。我无法使用SubmitType
,因为它会提交表单,对吗?我只是想用一个简单的按钮。
问题是,当我做console.log(html)
时,我没有看到新的html元素,所以看起来我没有到达EventListener
,这很奇怪,因为如果我在侦听器中转储内容我得到了一些数据。看起来我似乎没有把它放在响应中
答案 0 :(得分:2)
好的,明白了。问题是我在builder
事件中使用了POST_SUBMIT
,但我必须使用FormInterface
。由于我无法在提交后添加它,我必须购买与Symfony的食谱相同的回调功能
$formModifier = function (FormInterface $form, $preparedOptions) {
$form->add($this->childIdentifier, ChoiceType::class, $preparedOptions);
};
然后监听器就像这样构建
$builder
->get('lang_switcher')
->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier, $options) {
$preparedOptions = $this->prepareOptions($options);
$formModifier($event->getForm()->getParent(), $preparedOptions);
}
);
答案 1 :(得分:-1)
<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>