我的应用包含一个包含三个选项字段/下拉列表的表单。
第一个链接到实体中的“关系”字段,并且工作正常。 用户应该首先选择一个表链接。
第二个和第三个都链接到同一实体中的字符串字段。 通过jQuery,这些选择字段将根据用户在第一个下拉列表中做出的决定来填充值。
提交表单后,第二个和第三个字段出错:它们包含无效输入。当我检查表单对象时,它们的值没有绑定;他们的价值观从未到来。
从用户收集字符串数据的选择字段如下所示:
->add('sourceName', 'choice', array
(
'label' => 'Choose source name:',
'empty_value' => 'Please choose a table link first...',
'choices' => array(),
'attr' => array('class' => 'extFieldChoice'),
)
在jQuery完成其工作后,html select元素如下所示:
<select id="someId" name="someName[sourceName]" required="required"
class="extFieldChoice">
<option value="first">first</option>
<option value="second">second</option>
<option value="manymore">Many more...</option>
</select>
我怀疑错误可以在最初为空的选择数组中找到。然而,要填写所有可能的选择是不可能的,因为它们可以运行数百个。
答案 0 :(得分:2)
我前几天遇到了同样的问题,这让我很难找到解决方案,我遇到了这个问题,甚至可能为时已晚,我想分享我所提出的解决方案发现万一有同样问题的人,我找到了其中三个,但似乎没有一个是完美的解决方案。
在我的情况下,我必须根据zipCode保存用户选择的城市。当用户保存一个新地址时,他会用zipCode表示,然后通过ajax我用城市选项填写城市选择。
我的选择&#34;现场声明:
$builder->add('city', 'choice', array(
'label' => 'form.city',
'read_only' => true,
'mapped' => false,
'required' => false,
'empty_value' => false,
'choices' => array('none' => 'form.empty.city'),
'data' => null
));
问题在于表单验证需要两件事:
所以我找到了三种方式:
根据第二个选项,我根据用户所做的城市选择填写其他一些隐藏字段,所以我只添加一个隐藏字段来保存城市名称;当表单被提交时,我从select中删除所有选项,因此它与我定义的选项相匹配。
$('#cityChoice').on({
change: function(){
var optionSelected = $(this).find('option:selected');
$('#city').val(optionSelected.val());
$('#latitude').val(optionSelected.data('lat'));
$('#longitude').val(optionSelected.data('lng'));
}
});
$('#myForm').on({
submit: function(){
$('#mySelect option').remove();
}
});
我已经决定采用第三种选择,但我认为其中三种选择都不好。