Matoucí atribut id u formulářů

- jtousek
- Člen | 951
Není to tak dávno, co Nette začalo nastavovat ID formulářů i jednotlivých formulářových elementů pro vlastní potřebu. Zřejmě se to využívá pro validaci na straně klienta.
Bohužel toto se ukazuje jako dvojsečná zbraň, protože např. nelze udělat tohle:
<?php
$form->getElementPrototype()->id = 'formular';
?>
Jak je vidět, tato vlastnost Nette spoustu lidí mate, jen za poslední dny se tohle téma řešilo tady a tady.
Proto navrhuji, aby Nette pro svou potřebu nepoužívalo atribut ID, ale třeba data-nette-id je-li to možné.
Sám jsem si téhle vlastnosti Nette dobře vědom a ID pro formuláře tak jako tak nepoužívám, jen se mi zdá, že se to řeší na fóru až moc často.

- David Grudl
- Nette Core | 8285
$form->getElementPrototype()->id = 'formular' mi funguje
jak v poslední revizi 0.9, tak 1.0.

- toka
- Člen | 253
jtousek napsal(a):
Pardon moje chyba.
<?php $this->addTextArea('address', 'Adresa') ->getControlPrototype()->id = 'test'; //nefunguje $this->addTextArea('address', 'Adresa') ->setHtmlId('test'); //tohle samozřejmě funguje, ale je to trochu nestandardní ?>
Proč by mělo být setHtmlId('...') nestandardní? Konkrétně
k formuláři je ke změně id třeba přistupovat pomocí
getElementPrototype('...') např. jak uvedl David:
$form->getElementPrototype()->id = 'formular'. U
textarea je třeba nastavit id správně jak
elementu, tak i labelu. Jenže label
nemá vlastnost id ale for.
Musel bys udělat „něco“ podobného následujícímu:
// nasledujici kod samozrejme nefunguje :-)
$form['address']->getLabelPrototype()->for = 'test'; // potrebujeme prepsat for, aby fungoval element label korektne
$form['address']->getElementPrototype()->id = 'test'; // potrebujeme prepsat id, aby na nej odkazoval label
Pokud by byl použit
$form['address']->getControlPrototype()->id = 'test', tak by
měl ze své funkce upravit id, ale má upravit for a
id – A k tomuto účelu slouží právě
setHtmlId('...').
Toť můj pohled na věc.