Javascript Symfony2级联下拉列表值通过ajax更改提交时不接受
我的symfony表单中有两个实体下拉字段。在前端,我根据第一个下拉选择值的值,使用ajax更改了第二个下拉选择的选项列表。在提交表格时,我得到一个错误Javascript Symfony2级联下拉列表值通过ajax更改提交时不接受,javascript,php,jquery,ajax,symfony,Javascript,Php,Jquery,Ajax,Symfony,我的symfony表单中有两个实体下拉字段。在前端,我根据第一个下拉选择值的值,使用ajax更改了第二个下拉选择的选项列表。在提交表格时,我得到一个错误 This value is not valid. 下面是代码 /** * @ORM\ManyToOne(targetEntity="State") * @ORM\JoinColumn(name="province_id", referencedColumnName="id") */ protected $Province; /**
This value is not valid.
下面是代码
/**
* @ORM\ManyToOne(targetEntity="State")
* @ORM\JoinColumn(name="province_id", referencedColumnName="id")
*/
protected $Province;
/**
* @ORM\ManyToOne(targetEntity="District")
* @ORM\JoinColumn(name="district_id", referencedColumnName="id")
*/
protected $District;
在形式上,
->add('domicileDistrict','entity', [
'label' => ucwords('District'),
'class'=>'GeneralBundle\Entity\District',
'required' => true,
'mapped' => true,
'attr' => ['class' => 'form-control'],
'label_attr' => ['class' => 'control-label'],
])
->add('domicileProvince','entity', [
'label' => ucwords('Province'),
'class'=>'GeneralBundle\Entity\State',
'required' => true,
'attr' => ['class' => 'form-control select2'],
'label_attr' => ['class' => 'control-label'],
])
在前端
$("#profile_from_type_domicileProvince").change(function() {
var state = $('option:selected', this).val();
getDistrictByState(state);
});
function getDistrictByState(state){
var dict = {
type: "POST",
url: "{{ url('ajax_district_by_stateId') }}?id=" + state,
success: function(e) {
$("#profile_from_type_domicileDistrict option").remove();
$.each(e, function(e, p) {
$("#profile_from_type_domicileDistrict").append($("<option />", {
value: e,
text: p
}));
});
}
};
$.ajax(dict);
}
我也有同样的问题 我在这里编写了一个包来处理“可扩展”选择类型(也包括实体或文档): 我是如何做到的: 在表单提交过程中,我们可以通过PRE_SUBMIT FormEvent访问提交的实体。 所有提交的实体都已加载并位于$event->getData()中 然后,我们只需将提交的选择作为字段的新“选择”选项 警告: 这样做只会验证提交的实体是否存在! 如果只有一部分实体是可能的选择,则必须添加约束以验证它们
您还可以在PRE_SUBMIT事件中设置选项,具体取决于第一个下拉列表的值(而不是使用所有提交的实体)。我已经添加了该事件,但在更改省下拉列表时不会发生任何更改。请立即查看更新的问题。此事件仅在您提交表单时触发。请编写一些退出(dump('foo');在您的preSubmitData方法中,以了解它是否被触发。
PRE_SUBMIT
不会按照您的要求更改第一个选择框。提交表单时,它会将所需选项填充到动态选择框中。您是否仍然收到此值无效。
提交时出错?@Jeet是的,我收到了错误,因此在预提交事件中,我收到了所选的下拉值并将其转换为对象,并设置表单字段数据属性。现在它没有提示任何erorr。
$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'preSubmitData']);
public function preSubmitData(FormEvent $event){
$form = $event->getForm();
$data = $event->getData();
if (array_key_exists('Province', $data)) {
$state = $data['Province'];
$event->getForm()
->add('District','entity', [
'label' => ucwords('District'),
'class'=>'GeneralBundle\Entity\District',
'required' => true,
'mapped' => true,
'query_builder' => function(DistrictRepository $repository) use ($state) {
$qb = $repository->createQueryBuilder('d')
->andWhere('d.verified = :verified')
->andWhere('d.active = :active')
->setParameter('verified', true)
->setParameter('active', true);
if ($state instanceof State) {
$qb = $qb->where('d.state = :state')
->setParameter('state', $state);
} elseif (is_numeric($state)) {
$qb = $qb->where('d.state = :state')
->setParameter('state', $state);
} else {
$qb = $qb->where('d.state = 1');
}
return $qb;
},
'attr' => ['class' => 'form-control select2'],
'label_attr' => ['class' => 'control-label'],
]);
}
}