diff --git a/src/Forms/Controls/SelectBox.php b/src/Forms/Controls/SelectBox.php
index 6f50e882..a13499a6 100644
--- a/src/Forms/Controls/SelectBox.php
+++ b/src/Forms/Controls/SelectBox.php
@@ -106,6 +106,7 @@ public function getControl(): Nette\Utils\Html
}
$items = [$promptKey => $this->translate($this->prompt)] + $items;
if ($this->isRequired()) {
+ $selected = array_key_exists($this->value, $this->getItems()) ? $this->value : null;
$attrs['hidden:'][$promptKey] = $attrs['disabled:'][$promptKey] = true;
$selected ??= $promptKey; // disabled & selected for Safari, hidden for other browsers
}
diff --git a/tests/Forms/Controls.SelectBox.render.phpt b/tests/Forms/Controls.SelectBox.render.phpt
index 83800c40..aac609eb 100644
--- a/tests/Forms/Controls.SelectBox.render.phpt
+++ b/tests/Forms/Controls.SelectBox.render.phpt
@@ -90,6 +90,33 @@ test('prompt + required', function () {
Assert::same('', (string) $input->getControl());
});
+test('prompt + checkDefaultValueToFalse + value does not exist', function () {
+ $form = new Form;
+ $input = $form->addSelect('list', 'Label', [
+ 'a' => 'First',
+ 0 => 'Second',
+ ])->setPrompt('prompt')->checkDefaultValue(false);
+
+ Assert::same('', (string) $input->getControl());
+
+ $input->setValue('does not exists');
+
+ Assert::same('', (string) $input->getControl());
+});
+
+test('prompt + required + checkDefaultValueToFalse + value does not exist', function () {
+ $form = new Form;
+ $input = $form->addSelect('list', 'Label', [
+ 'a' => 'First',
+ 0 => 'Second',
+ ])->setPrompt('prompt')->setRequired()->checkDefaultValue(false);
+
+ Assert::same('', (string) $input->getControl());
+
+ $input->setValue('does not exists');
+
+ Assert::same('', (string) $input->getControl());
+});
test('unique prompt', function () {
$form = new Form;