setHtmlAttribute(‚readonly?‘)

index
Člen | 3
+
0
-

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)

Kamil Valenta
Člen | 762
+
0
-

A removeAttributes([‚readonly‘]) nejde?

Šaman
Člen | 2635
+
+1
-
  1. Kde jsi vyčetl, že „aby se to automaticky přepínalo, jak by podle dokumentace mělo“?
  2. 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í od Nette\Forms\Controls\BaseControl).
  3. 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
+
0
-

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:^)