Disabled položky a jejich hodnota
- bene
- Člen | 82
Narazil jsem na problém disable položek ve formuláři.
Je jasné že disabled položky prohlížeč neodesílá. Tudíž pokud
formulář neprojde kvůli chybě je třeba těmto disabled položkám opět
nastavit původní hodnotu. Očekával bych ale, že ji nastavím přímo při
definici formuláře, kde se rozhoduji, která položka je disabled. Nicméně
to nefunguje.
$form->addCheckbox('name', 'Label')->setDisabled(true)->setValue(true);
Proto musím v render/action zjistit, která položka je disabled a hodnotu ji nastavit.
Lze to řešit nějak elegantněji?
- klimax
- Člen | 7
Jak mam obejit kontrolu formulare na poli selectboxu project, tak aby ho uzivatel nemohl vybrat, presto, aby se podle nej spravne nastavil dependentselectbox leader a pri odeslani formulare v editaci dat, aby mi dependent nehlasil chybu, ze projekt neni vybrany (pri disabled se neprovedet odeslani dat), takze ani leader v tu chvili korektne vybran.
Potrebuji uzivateli zobrazit, jaky projekt tam ma, a seznam leaderu, ktere muze vybrat, ve fazi pridavani si i projekt muze vybrat, ve fazi editace ovsem ne
pri nastaveni prvku $form[‚project‘]->setValue($data[‚project_id‘]); se dependentbox leader chova korektne, ale po odeslani formulare mi neposle nova vybrana data, ale posila mi ty defaultni z DB, coz nechci, ale chci aktualni data, ktera uzivatel vybral :(
<?php
public function createComponentTeamsAddForm($name) {
$teammodel = new TeamModel();
$projects = $teammodel->getProjects();
$form = new AppForm($this, 'teamsAddForm');
$form->addSelect('project', 'Projekt:', $projects)->skipFirst('Vyberte projekt');
$form['project']->addRule(Form::FILLED, 'Vyberte projekt');
$form->addDependentSelectBox('leader', 'Leader', $form['project'], array($this, 'getValuesSelectLeader'));
if ($this->isAjax()) {
$form['leader']->addOnSubmitCallback(array($this, 'invalidateControl'), 'formSnippet');
}
$form['leader']->addRule(Form::FILLED, 'Vyberte leadera');
//dalsi formularove prvky
//ziskani dat z DB
$data = $teammodel->getData($this->id);
//nastaveni defaultnich dat z DB do formulare
$form->setDefaults(array(
'project' => $data['project_id'],
'leader' => $data['leader_id'],
));
//zakazani selectu
$form['project']->setDisabled(true);
//nacteni dat pro leadera
$form['leader']->refresh();
$form->addSubmit('edit', 'Uložit');
$form->onSubmit[] = callback($this, 'editTeamsSubmitted');
return $form;
?>
nette 0.9.7
php 5.3
Editoval klimax (1. 3. 2011 8:16)
- klimax
- Člen | 7
tak jelikož ani
<?php
$form['project']->getControlPrototype()->readonly='readonly';
?>
na selectu nefunguje
použil jsem tohle
<?php
$form['project']->getControlPrototype()->onfocus = 'this.defaultIndex=this.selectedIndex';
$form['project']->getControlPrototype()->onchange = 'this.selectedIndex=this.defaultIndex';
?>
ale asi moc elegantní řešení to není, pokud uživatel bude mít zakázaný javascript