Multiselect – addCondition pro jednu z variant
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- potapnik
- Člen | 127
Ahoj, při použití multiselectu se snažím zobrazit přes toggle další formulářové prvky. Pokud mám vybraný pouze jeden konkrétní option v selectu, tak to funguje, ale při vícenásobném výběru to netoggluje. Podmínku v addCondition mám EQUAL, tzn. to bere všechny hodnoty z multiselectu a pokud to matchuje pouze v jedné, tak to funguje, jinak ne. Lze to nahradit něčím jako Form::CONTAINS, nebo na to existuje nějaký jednoduchý regulár?
Příklad, kde to netoggluje při vícenásobném výběru z multiselectu:
<?php
$form->addMultiSelect('roles', 'messages.formLabels.roles')
->setItems($this->authenticator->getRoles(), FALSE)
->addCondition(Form::EQUAL, 'partner')
->toggle('partnerDetailsGroup');
$form->addGroup('messages.formGroups.partnerDetails')->setOption('id', 'partnerDetailsGroup');
?>
- duke
- Člen | 650
Můžeš na to použít vlastní validační pravidlo:
$form->addMultiSelect('roles', 'messages.formLabels.roles')
->setItems($this->authenticator->getRoles(), FALSE)
->addCondition('MyApp\CustomValidators::partnerInRoles')
->toggle('partnerDetailsGroup');
Pak jen napsat onen validátor (viz dokumentace). V PHP to není problém, v JS to má vypadat zhruba takto (netestováno):
Nette.validators.MyAppCustomValidators_partnerInRoles = function(elem, args, val) {
return jQuery.inArray("partner", val);
}
Editoval duke (25. 9. 2016 20:09)