setHtmlAttribute(‚readonly?‘)
- index
- Člen | 3
Dobrý den,
pracuji na jedné aplikaci k administrativním účelům a potřebuji po
kliknutí na tlačítko ‚Edit‘
převést formulář s daty do editačního režimu. Defaultně je ve
‚view‘ režimu, kdy mají všechny textboxy nastaveny
atribut readonly a právě to se snažím pomocí handle změnit. Původně jsem
používal při vytvoření formuláře setDisabled() apod.,
ale nette formulářové prvky po změně atributu disabled nevidí v postu,
takže jsem přešel na readonly. Mám ale problém v tom,
že když jako v dokumentaci (https://doc.nette.org/…tml-elements)
použiju setHtmlAttribute(‚readonly?‘), tak se mi k
tomu prvku přidá atribut ‚readonly?‘ místo toho, aby se to automaticky
přepínalo, jak by podle dokumentace mělo.
Například tady:
$this[‚recordForm-serial_number‘]->setHtmlAttribute(‚readonly?‘);
Poradil by mi prosím někdo, v čem dělám chybu?
Předem díky za všechny odpovědi. :^)
Editoval index (2. 6. 2021 15:31)
- Šaman
- Člen | 2667
- Kde jsi vyčetl, že „aby se to automaticky přepínalo, jak by podle dokumentace mělo“?
- Odkázaná stránka dokumentace je pro HTML element (instanci třídy
Nette\Utils\Html
). Zatímco ty pracuješ s formulářovým prvkem (prvek nějaké třídy dědící odNette\Forms\Controls\BaseControl
). - Na prvek
Html
se ve formuláři dostaneš$input->getControlPrototype()
a pak si s ním můžeš dělat docela cokoliv. Třeba$el->removeAttribute('readonly');
Editoval Šaman (2. 6. 2021 21:44)
- index
- Člen | 3
Bylo to ajaxem, vyřešil jsem odstraněním ajaxu a pomocí perzistentních
proměnných pro režim formuláře (view/edit).
Když bych měl ajax a používat setDisabled(true/false), nette neuvidí
hodnoty formulářových prvků, protože je to to samé, jako by nějaký
náhodný uživatel zmáčkl F12 a u formulářových prvků by umazal atribut
disabled, proto se mi nelíbilo původní jquery řešení.
Tak samo to bylo i po odstranění ajaxu.
Jediné k čemu jsem došel a co v podstatě nejvíce z hlediska
bezpečnosti + ošetření uživatelského vstupu ‚dává smysl‘ je
použít perzistentní proměnnou a při načtení stránky buďto vytvářet
setDisabled hodit na true nebo ho vůbec nezapínat.
Když ho nemůžeš vypnout, tak ho nezapínej, že:^)
Pokud bude mít někdo stejný problém, tak doufám, že moje řešení pomůže, protože jsem o tom ještě nikde nic moc nenašel:^)