Radiolist s textovým inputem
- andrstom
- Člen | 21
Ahoj,
pátral jsem po fóru a googlil jsem, ale nenašel jsem vhodné řešení, které by fungovalo. Potřeboval bych nakopnout s nastavením radiolistu. Cílem je, aby poslední item v radiolistu byl textové pole kam uživatel zadá číslo (Other). Rád bych se kvůli validaci vyhnul manuálnímu rendrování.
Za každou radu nebo nasměrování moc děkuju.
<?php
$form->addRadioList('dilution', 'Dilution:', ['101' => '101x (serum)', '2' => '2x (CSF)', '81' => '81x (synovia)', '' => 'Other'])
->setDefaultValue('101');
?>
- Pavel Kravčík
- Člen | 1196
Uděláš samostatný textový input, tomu nastavíš přes HTML pro div
nějaké id. A pak u tvého radiolistu dáš
->toggle('nazevid')
s podmínkou na konkrétní název klíče.
Příklad je tady: https://doc.nette.org/…s/validation#…
- andrstom
- Člen | 21
Pavel Kravčík napsal(a):
Uděláš samostatný textový input, tomu nastavíš přes HTML pro div nějaké id. A pak u tvého radiolistu dáš
->toggle('nazevid')
s podmínkou na konkrétní název klíče. Příklad je tady: https://doc.nette.org/…s/validation#…
Ahoj Pavle,
děkuju za nasměrování. Tvou variantu jsem také zkoušel a zdá se být
ideální. Jen mám problém s togglovaní. Resp. mám ve formuláři selectbox
a v závislosti na optionu se mi formulář dynamicky překreslí – v tomto
momentě už mi nefunguje toggle().
Nějaký nápad?
Presenter:
...
public function renderDefault() {
$dilutions = ['101' => '101x (serum)', '2' => '2x (CSF)', '81' => '81x (synovia)', 'x' => 'Jiné / Other'];
$this->template->dilutions = $dilutions;
}
...
public function createComponentCalculatorForm() {
$form = new Form;
$form->addRadioList('dilution', '* Ředění vzorku / Dilution:', $dilutions)
->setDefaultValue('101')
->addCondition(Form::EQUAL, 'x')
->toggle('other_dilution', true)
->endCondition()
->addCondition(Form::NOT_EQUAL, 'x')
->toggle('other_dilution', false)
->endCondition(); // + další validacni pravidla
$form->addText('other_dilution', 'Jiné/Other:')
->setHtmlId('other_dilution')
->addConditionOn($form['dilution'], Form::EQUAL, 'x')
->setRequired('Vyplnit Jiné / Set Other')
->endCondition();
...
Latte:
{snippetArea wrapper}
{snippet paramSnippet}
{form calculatorForm}
<p>{label assay /} {input assay}</p> <!-- prekresly formular -->
<p n:foreach="$dilutions as $item => $key"><label for="{$item}"><input type="radio" n:name="dilution" id="{$item}" value="{$item}"> {$key}</label></p>
<p>{input other_dilution}</p>
{/form}
{/snippet}
{/snippetArea}
...
{include jsCallback, input => assay, link => loadAssayDetails}
{define jsCallback}
<script>
$('#' + {$control["calculatorForm"][$input]->htmlId}).off('change').on('change', function () {
$.nette.ajax({
type: 'GET',
url: {link {$link}!},
data: {
'value': $(this).val(),
}
});
});
</script>
{/define}