Nefunkcny onSucces po zmene value javascriptom

vladimir.biro
Člen | 163
+
0
-

Ahojte.

Mam problem, s ktorym sa pasujem uz druhy den.

V skratke vysvetlim:

Mam formular a v nom selectbox. Ten naplnam hodnotami v style ->fetchPair(‚id‘, ‚nieco‘).
Value jednotlivych options je teda cislo.

Na tento selectbox je naviazany javascript, ktory robi to, ze meni tieto value na inu hodnotu.
Ide konkretne o znacky krajin (CZ,SK,UK…).
Cize povodne <option value=„1“>…</option> tento js zmeni na <option value=‚CZ‘>…</option>
Podstatne je hlavne to, ze su to ine hodnoty, ako tam vkladam pri vyrobe formularu.

Moj problem:

Vobec sa mi po odoslani formularu nespusti ->onSuccess(), pokial mam na addSelect nastavene setRequired(‚nieco‘)

Moja uvaha:

Mysim si, ze vzhladom k tomu, ze hodnota daneho selectu po odoslani formularu (pr. ‚CZ‘) nezapada do povodneho zoznamu hodnot setItem() (pr: [1,2,3,4 ..]), tak nejaky zabezpecovaci mechanizmut mi nespracuje dany formular.

Viete mi niekto prosim poradit, ako si s tymto poradit? Som uz zufaly. Skusal som cez onSubmit (ta sa mi spusti) nastavit podla danej string hodnoty pomocou setValue() nastavit opat int hodnotu (aby spadala do povodnych hodnot), no vobec to nepomohlo a onSuccess sa tak ci tak nespustil.

Neviem ci som to dobre vysvetlil a ci je zrozumitelne co potrebujem. Ak je nieco nejasne, kludne dovysvetlujem.

( Neradte mi prosim, ze mam zmenit ten JS co meni tie hodnoty. Neviem to zmenit, lebo je to modul s minifikovanym javascriptom a dat prec ho nemozem, lebo ho potrebujem :) )

Editoval vladimir.biro (16. 9. 2020 19:03)

MajklNajt
Člen | 471
+
0
-

a prečo ten formulár od začiatku nekŕmiš hodnotami, ktoré sú v tom JS?

vladimir.biro
Člen | 163
+
0
-

MajklNajt napsal(a):

a prečo ten formulár od začiatku nekŕmiš hodnotami, ktoré sú v tom JS?

Pokial nevyriesim dany problem, tak to tak budem musiet robit.

No nechcel som, nakolko v ramci DB je to riesene klasicky cez ID a casom moze v projekte vzniknut bordel pretoze sa jedna o dost rozsiahly projekt a dana situacia bude pomerne dost casta, tak som to chcel vyriesit systemovo v tovarnicke formularu a dalej neriesit upravu vstupnych hodnot pre dany select box.

Nehovoriac o tom, ze na projekte moze pracovat viac vyvojarov.

dakur
Člen | 493
+
0
-

@vladimirbiro Myslím, že tady/tady k tomu něco je – konkrétně nedefinovat select ve Form, ale jen v šabloně a pak v onSuccess zavolat $form->getHttpData($form::DATA_TEXT, 'selectbox[]').

Editoval dakur (17. 9. 2020 9:44)

vladimir.biro
Člen | 163
+
0
-

dakur napsal(a):

@vladimirbiro Myslím, že tady/tady k tomu něco je – konkrétně nedefinovat select ve Form, ale jen v šabloně a pak v onSuccess zavolat $form->getHttpData($form::DATA_TEXT, 'selectbox[]').

To je presne neco, cemu jsem se chtel vyhnout (definovat hodnoty v sablone) :(

vladimir.biro
Člen | 163
+
0
-

Abych ziskal vybranou hodnotu, mohl bych pouzit getRawValue(), ktera vrati hodnotu bez kontroly, jestli tahle spada do puvodniho pole vstupnich udaju. Nevim ale, jak to pouzit, kdyz se mi tak ci tak nespusti onSuccess.

Ondřej Kubíček
Člen | 494
+
0
-

musel bys leda vypnout validaci https://doc.nette.org/…s/validation#…

David Matějka
Moderator | 6445
+
0
-

fakt moc nerozumím tomu, proč select naplňuješ hodnotama, který pak nepoužíváš.

johnnie
Člen | 54
+
0
-

pripadne si mozes vypnut overovanie hodnot na tom selectboxe

$form->addSelect()->checkAllowedValues = false;

ale samozrejme by bolo rozumnejsie tam dosadit tie spravne hodnoty uz na zaciatku.

vladimir.biro
Člen | 163
+
0
-

David Matějka napsal(a):

fakt moc nerozumím tomu, proč select naplňuješ hodnotama, který pak nepoužíváš.

Mam databazi se zaznamama, ktere mam prepojene na tabulku s countries. Propojeni je samozrejme pres ID a taky naplnovani formularu default hodnotami.

Na selectbox vyberu krajiny pouzivam modul, ktery automaticky naplni tenhle hodnotama vsech krajin, naplni to vlajeckama a tak podobne.

Ten ale zmeni i value hodnoty z mych id na znacky krajin, protoze samozrejme netusi, jake ja mam id na kterou krajinu.

Jasne, zebych mohl obycejnej selectbox naplnit hodtonama z DB, ale tenhle modul tam automaticky pridava ty vlajecky, jde v nem vyhledavat a ruzne takove js vecicky jsou tam.

Vim, ze je to trochu kostrbate, nejdriv menit id na znacku a pak znacku na id, ale delam to kuli tomu modulu no.

David Matějka
Moderator | 6445
+
+1
-

tak stejne z toho kodu zeme to musis premapovat na tvoje id, ne? tak proc rovnou ten kod zeme nedas jako value u tech option?

vladimir.biro
Člen | 163
+
-2
-

David Matějka napsal(a):

tak stejne z toho kodu zeme to musis premapovat na tvoje id, ne? tak proc rovnou ten kod zeme nedas jako value u tech option?

Protoze mi pak nesedi nastaveni setDefault pro formular, ktery si nastavuju jednoduse

$this->setDefault($this->neco);

Pricem to $this->neco nastavuju jako:

public function neco()
{
return $this->database->table(‚table_neco‘);
}

(sloupce v tabulkach mam pojmenovane stejne, jak prvky ve formularu)

Co mi prijde jako fajn nednoduchy. Jasne, ze by nebyl problem to setDefault rozebrat a nastavit kazdou polozku formularu, ale vzhledem k tomu, ze ten projekt pouziva desitky formularu a tenhleten prvek se uziva ve vetsine z nich, chtel jsem udelat nejakej mechanizmus, kterej by sa vykonaval na pozadi (formFactory) a jedina starost vyvojaru by byla pridat do selectboxu jen ->setHtmlAttribute(‚countrypicker‘) a jinak mohli delat se selectboxem jako s kazdym jinym.

Ja pak ve factory za pomoci if ($control->getControl()->getCountrypicker() === true) zjistim, ze je jedna o danej prvek a upravim mu ty data.

Tohle teda byla moje utopisticka predstava. Vubec mne nenapadlo, ze se to zasekne tak, ze to proste nepujde.

Ale treba jsem se smiril, ze z toho odstranim tu validaci (cize nepridam setRequired) a nasledne to budu validovat pres onValidate ve factory. To mi castecne i funguje, jen odtamtud nemuzu zase vyvolat flashMessage, ktery by chybu zobrazil jako alert (treba) :D :D :D

Jako uprimne bych se na to uz asi i vykaslal a proste to delal tak, ze by se muselo dat bacha na to, ze s timhle selectboxem se zachazi jinak, nez s tema ostatnima (jakoze se plni jinyma hodnotama, taky default se nenastavuje klasicky pres ID a tak …) uz mne vic sere to, ze to proste NIJAK nejde udelat :D

Editoval vladimir.biro (18. 9. 2020 11:47)

vladimir.biro
Člen | 163
+
0
-

Uuuh no vyzera to, ze sa mi to podarilo.

Brlanim sa v drojakoch nette som nasiel callback onAnchor, ktory prebehne este pred samotnou validaciou formularu a tym padom je tam mozne ovplivnit hodnoty formulara. V tomto callbacku (vo FormFactory) som teda zadal:

$control->setValue($this->getIdByCode($control->getRawValue()));

Cim hodnota suhlasi so vstupnymi udajmi a spusti onSuccess aj s hodoutou, ktrou tam potrebujem.