SelectBox event onChange, existuje něco takového?

Nax
Člen | 35
+
0
-

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
+
0
-

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/

Nax
Člen | 35
+
0
-

Tak já chápu že mám nějaký JavaScript co obsluhuje formuláře, nicméně rád bych zůstal v té fázi kdy mi stačí pouze JavaScript již existující.