Kdyz pridam hidden prvek tak se nastavi automaticky na disabled

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tomasnikl
Člen | 137
+
0
-

Ahoj,

zda se mi, ze se mi nejak divne chova formular. V presenteru vytvarim komponentu formulare a pridavam hidden input:

$form->addHidden('userId');

V sablone pote vypisuji tento hidden input takto:

{input userId value=>$user->id}

A po vygenerovani formulare vidim toto:

<input value="2" type="text" name="userId" disabled="disabled" id="frmeditUserForm-userId">

a to disabled tam samozrejme nechci, jinak se mi prvek neodesle… nevite jak atribut disabled odstranit?

Editoval tomasnikl (1. 9. 2011 10:40)

uestla
Backer | 799
+
0
-

Hidden fileds se vykreslují automaticky s otvíracím {form ...} makrem. Čili hodnotu nastav už v definici formuláře a o vykreslení se nestarej.

smasty
Člen | 90
+
0
-

Len opravím, vykresľujú sa automaticky s uzatváracím makrom {/form}.

uestla
Backer | 799
+
0
-

Správně, omlouvám se ;-)

tomasnikl
Člen | 137
+
0
-

az ted jsem si vsiml ze jsem ten dotaz zalozil omylem 2x…
https://forum.nette.org/…rvky-prazdne

v tom druhem vlakne jsem se pkladl jeden dotaz, na ktery bych rad znal odpoved.. jestli to je opravdu tak jak pisete a hidden prvky nemuzu v sablone ovlivnit, tak mi to prijde spise jako chyba.. pac uz nekolikrat jsem na nejakych projektech potreboval javascriptem upravovat v hidden inputech hodnoty… jak to ale resit v Nette?

hAssassin
Člen | 293
+
0
-

@tomasnikl > ale JS a Nette prece spolu nema nic moc spolecnyho, Nette je PHP… Cili to co budes delat na strane klienta v JS je uz jen na tobe a menit hodnotu u hidden prvku samo muzes, stejne tak jako muzes ovlivnovat cokoliv v DOMu…

tomasnikl
Člen | 137
+
0
-

hAssassin napsal(a):

@tomasnikl > ale JS a Nette prece spolu nema nic moc spolecnyho, Nette je PHP… Cili to co budes delat na strane klienta v JS je uz jen na tobe a menit hodnotu u hidden prvku samo muzes, stejne tak jako muzes ovlivnovat cokoliv v DOMu…

To je samozrejme pravda, ale jde o neco jineho. Ja si zkousel vykreslit formular pomoci nette (viz zminka nahore) a pote jsem si v pluginu Firebug zmenil hodnotu value hidden inputu na neco jineho a formular jsem odeslal. Nette mi tuto hodnotu nevzalo. Tady ten problem (alespo u mne) nema s Javascriptem nic spolecneho, jde o to, ze kdyz ve formulari mam nejake hidden prvky a jakkoliv po vykresleni stranky zmenim jejich value (javascriptem, pres firebug..) tak mi to Nette nezpracuje a nove hodnoty inputu ignoruje..

neverim, ze by se s timto problemem jeste nikdo nesetkal, vzdyt je to tak bezna vec, ze uz to urcite nekdo musel resit :o)

Jeste me napadla jedna vec, kterou jsem sice nezkousel ale mam takovy pocit ze chovani bude stejne.. co kdyz do formulare (po vykresleni stranky) javascriptem vlozim novy hidden input. Predpokladam ze ten nette take bude po odeslani ignorovat a v $form->getValues() jej neuvidim..

Mozna to cele jen spatne chapu, tak budu rad kdyz me vyvedete z omylu, ale pokud je popisovany problem opravdu takovyto, tak to vidim jako velkou chybu.

Napr priklad s jednoduchou antispamovou kontrolou (jednoduchou proto, ze je nutne mit zapnuty javascript):

vytvorim formular a skryty input:

<input type="hidden" name="iSrobot" value="1" />

a pote za pouziti jQuery zmenit jeho hodnotu:

$('input[name$="isRobot"]').val('0');

a ve zpracovani formulare by byla nejaka takovato podminka:

if($values['isRobot']==1){
	//uzivatel je but robot nebo nema zapnuty javascript. Formular neodesleme
}else{
	//odesleme a ulozime formular.... protoze uzivatel neni robot
}

Ale jelikoz Nette v tomto pripade neodesle hodnotu inputu isRobot rovnu nule, ale dostane hodnotu rovnu jedne, tak nastava problem. Kazdy uzivatel je tim padem robot..

hAssassin
Člen | 293
+
0
-

@tomasnikl > zajimavy, jeste sem se s tim nesetkal, pac co delam v Nette jsem to jeste nepotreboval. Ale je fakt, ze si Nette hlida hodnoty napr. u selektu v options a pokud nejaky zmenis pres firebug tak to bere porad ty puvodni. Jak je to ale s hidden fields vazne netusim, ikdyz tohle muze zpusobovat problemy.

Nejstupidnejsi reseni ktery me ted napada, je vytvaret normalni textInputy a jim pres JS menit hodnoty, ale v css jin nastavit display: none, oni tam fyzicky budou a budou se odesilat se spravnou hodnotou ale nebudou videt. Coz by valit melo, ale jak rikam, stupidni reneni pres koleno. :(

Filip Procházka
Moderator | 4668
+
0
-

Přijde mi zvrácené nastavovat hodnotu toho prvku v šabloně, čichám nějaké hackování :P

Co se týče ignorování prvku který si přidáš sám, který nebude ve formuláři, tak ano, Nette ho bude ignorovat. Ale to je záměr. Díky tomu si tam můžeš posílat jaké chceš hlouposti, ale Nette ti vrátí jenom hodnoty prvků, které jsou nakonfigurované ve formuláři.

Nechápu jak ti může z hiddenu udělat disabled s typem text. Určitě tam neděláš nějaké kotrmelce?

tomasnikl
Člen | 137
+
0
-

@hAssassin: Tak to zatim resim, ale neni to moc elegantni..

@HosipLan: no byl to jen priklad, nakonec hodnotu nastavuji jiz v presenteru… ale i tak se mi to zda jako spatne reseni, myslim ze by to mohla byt otazka na diskuzi.. nebylo by spatne mit moznost alespon definovat jake hodnoty muze nabyvat hidden input a pokud nekterou z danych hodnot ma (to znamena ze defaultni hodnota se zmenila bud uzivatelem (firebug) nebo javascriptem) tak by to nette mohlo zchrousit. Pokud by hidden input mel hodnotu jinou nez definovanou, chovalo by se to stejne jako doposud…

pac zmineny priklad v mem predeslem prispevku (to s tim overovanim robotu) v nette tedy vyresit nejde jestli chapu spravne (alespon tak jak to zminuji). tech prikladu kde by bylo vhodne menit hodnotu hidden inputu je urcite vice, ale uz se mi takhle pozde vecer zadny nevybavi :)..

Jinak to s tim disabled byla moje chyba.. mel jsem v kodu preklep a omylem jsem disabled nastavil… zapomnel jsem to zminit

Filip Procházka
Moderator | 4668
+
0
-

Ale to jsi na omylu.

$form->addHidden('isRobot')->setDefaultValue(1);

+

<script>
$('input[name="isRobot"]').val('0');

Ti bude fungovat. Jenom musíš dát pozor na formulářová makra, jestli už vykreslují automaticky i hiddeny.

tomasnikl
Člen | 137
+
0
-

Vyzkousim, ale zda se mi ze takto jsem to zkousel a nefungovalo mi to… nebudu ale kecat, takze az proverim napisu