У меня есть выбор только для чтения, определенный formbuilder:
->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 для обновления из другого поля в моей форме. Следующий этот ответ, я установил выбор так, чтобы он не мог быть изменен пользователем:
* Установите его отключенным при создании.
* Перед отправкой установите его disabled = false
:
$(form).on('submit', function() {
$("select[id$='sampledBy']").prop('disabled', false);
});
Теперь при отправке я вижу изменение поля выбора на disabled = false
(цвет меняется на белый, и на него можно нажать, пока форма отправляется. Однако данные не сохраняются.
Кто-нибудь видел подобное поведение? JQuery, кажется, работает правильно, поэтому мне интересно, если это специфическая проблема Symfony.
Состояние не изменяется в браузере, даже если HTML сказал так.
Чтобы обойти это, я изменил поле на readonly через 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();
});
};