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;