nForm – nefunguje negace Form::EQUAL u Selectu / RadioListu a ‚toggle‘

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Vitek Jezek
hledá kolegy | 285
+
0
-

mam Select/Radiolist kde mam hodnoty ‚ano‘, ‚castecne‘, ‚ne‘. Potreboval bych, aby kdyz kliknu na ‚ano‘ a ‚castecne‘ se zobrazi nejakej div s textareou.

Zkusil jsem $form[‚test‘]->addCondition(‚!‘.Form::EQUAL, 2)->toggle(‚testDiv‘);
ale bohuzel – nette ignoruje negaci a implementuje to jako addCondition(Form::EQUAL, 2) – div se zobrazi jen prikliknuti na ‚ne‘.

Budu vdecnej za kazde navrhy : )

_Martin_
Generous Backer | 679
+
0
-

S formuláři jsem si ještě nehrál, ale co přidat dvě podmínky – jednu pro „ano“ a druhou pro „částečně“?

David Grudl
Nette Core | 8218
+
0
-

Negace se zadá jako addCondition(~Form::EQUAL, 2)

Vitek Jezek
hledá kolegy | 285
+
0
-

_Martin_: to jsem zkousel jako druhy, bohuzel, nForma si vezme jen posledni podminku.

David Grudl: to jsem zkousel vubec jako prvni ; ) Ale ~ me pro negaci nebere nikde v nFormach, zato Viliam Kopecky (enoice) me poradil fintu s „!“., ktera jinde funguje.

Zkousil jsem problem taky resit pres $form['test']->addCondition(Form::RANGE, array(1,2)), to ale hazi JS error.

//PHP 5.2.6, verze /Nette/Forms/Form.php: 65 2008–09–04 21:20:53 (nevim, kde vycist ‚absolutni‘ verzi revize)

Editoval Whitek (6. 10. 2008 20:59)

David Grudl
Nette Core | 8218
+
0
-

Ty nejspíš používáš tu samostatnou verzi na https://files.nette.org/NForm.zip – aktualizuju je sporadicky, takže to možná bylo zastaralé; zkus si ji stáhnout znova a napiš, jestli to už funguje.

Vitek Jezek
hledá kolegy | 285
+
0
-

Jojo, presne tu pouzivam.

Stahnul jsem ji, avsak bohuzel nefunguje : (

Tady je testovaci priklad s 3 moznyma resenima , ktere me napadli, avsak ani jedno se me nepodarilo zprovoznit.

David Grudl
Nette Core | 8218
+
0
-

ad 1) nette nebere negaci

Nette negaci (zapsanou pomocí ~) bere, ale v generátoru toggle-efektů byla chyba, která negaci nezohledňovala. Díky za report, opraveno.

ad 2) range (0–1) generuje chybu v JS

Důvod je ten, že podmínka RANGE se pojí jen textovým políčkem. Na vadnou podmínku by ale měl skript upozornit a ne generovat chybný JS. Opět díky za report, opraveno.

ad 3) nebo dvojnasobna podminka, nette si vybere tu posledni

Nette si vybere obě podmínky, takže div dvakrát přeblikne a zůstane v poslední pozici.


Ještě existuje jedno řešení – metodě toggle() lze druhým parametrem říct, jestli má při splnění podmínek objekt schovat (TRUE, výchozí) nebo zobrazit (FALSE).

Vitek Jezek
hledá kolegy | 285
+
0
-

ty jsi drak! Diky moc!

(za tohle ti zas ja dluzim pivo : D)

David Grudl
Nette Core | 8218
+
0
-

Rozšířil jsem podmínku EQUAL tak, aby akcepovala i pole hodnot – tj. kontroluje se, zda-li hodnota odpovídá alespoň jedné z uvedených hodnot:

$form['send']->addCondition(Form::EQUAL, array(0, 1))->toggle('sendBox');