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();
});
};
我有一个由 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();
});
};