Symfony 3 未禁用 select 未提交

Symfony 3 undisabled select not submitting

我有一个由 formbuilder 定义的只读 select:

    ->add('sampledBy', EntityType::class, array(
        'class' => 'AppBundle:FOSUser',
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->orderBy('u.cn', 'ASC');
        },
        'choice_label' => 'cn',
        'disabled' => true
    ))

我使用 JQuery 从表单中的另一个字段更新。在 this 回答之后,我设置了 select 以便用户无法更改它:

*创建时将其设置为禁用。

*提交前设置为disabled = false:

 $(form).on('submit', function() {
     $("select[id$='sampledBy']").prop('disabled', false);
 });

现在,在提交时我看到 select 字段更改为 disabled = false(颜色变回白色,并且在提交表单时可以点击它。但是,数据未保存。

有人见过类似的行为吗? JQuery 似乎工作正常,所以我想知道这是否是 Symfony 特定的问题。

即使 html 这么说,浏览器中的状态也不会改变。

为了绕过这个,我通过 javascript 将字段更改为只读,并更改了 CSS 使其看起来像是被禁用了。

->add('sampledBy', EntityType::class, array(
        'class' => 'AppBundle:FOSUser',
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->orderBy('u.cn', 'ASC');
        },
        'choice_label' => 'cn',
        'disabled' => false
    ))

在css

.readonly{
background-color: transparent !important;
  border : 0px !important;
    box-shadow: none;
}
.disabled{
background-color: transparent !important;
  border : 0px !important;
    box-shadow: none;
}

我最终使用 css 来跳过鼠标事件,并使用 JQuery 来处理键盘焦点:

self.blur_field = function (field) {
    $(field).css('background-color', '#eee');
    $(field).css('pointer-events', 'none');

    $(field).focus(function () {
        $(this).blur();
    });
};