SelectBox event onChange, existuje něco takového?
- Nax
- Člen | 35
Zdravím,
mám problém se SelectBox controlem. Rád bych každému selectu v továrničce přidal event onChange, který by se vytrigroval při změně hodnoty selectu, poslal presenteru signál že se změnil a presenter by podle toho překreslil celý formulář.
Konkrétně mi jde o to že mám několik selektu ktere mají stejný zdroj dat, ale pokud je nějaký element selektnutý v jednom selektu, v druhém už by něměla být možnost ho vybrat.
Vím že by se toto dalo celkem spolehlivě napsat v javascritu, ale snažím se mu ze všech sil vyhnout, jde mi spíš o to naučit se pořádně s nette formulářema.
Pro příklad, když přidádávám nový select pomocí Kdyby replicatoru, do nového selectu už v továrničce přidám pouze hodnoty které nejsou selectnuty v předchozích selectech:
$containerId = $container->getName();
$parentContainer = $container->getParent();
$subjects = $this->contractManagement->listContractingSides();
foreach ($parentContainer->getComponents() as $component) {
if(count($component->getComponents())) {
unset($subjects[$component->getComponent('subjects')->getValue()]);
}
}
if(!count($subjects)) {
$defaultValue = 'new';
}
else {
$defaultValue = min(array_keys($subjects));
}
$subjects['new'] = 'Vytvořit firmu/osobu';
$container->addSelect('subjects', null, $subjects)
->setAttribute('class', 'form-control select-search')
->setValue($defaultValue)
->addCondition(Form::EQUAL, 'new')
->toggle("new_contractor_{$container->getParent()->getName()}_$containerId");
Předem díky za všechny hinty
- Ondřej Kubíček
- Člen | 494
bez js to samozřejmě neuděláš, z klienta musíš nějak dát vědět na
server žes to změnil
doporučoval bych mrknout na extension dependency selectbox https://componette.org/…ntselectbox/