Validuje při odeslání buttonem s setValidationScope(false)
- lutor
- Člen | 27
V Nette ani JS nejsem žádný profík, ale možná jsem narazil na bug v netteForms.js.
Mám
// ...
$form->addSubmit('cancle', 'Zpět na přehled')->setValidationScope(false);
// ...
to vygeneruje
<input type="submit" formnovalidate class="button" name="cancle" id="frmformEdit-cancle" value="Zpět na přehled">
Nette vygeneruje správně HTML submit tlačítka, které má nastaveno
->setValidationScope(false)
, s atributem
formnovalidate
, což zřejmě (jak jsem pochopil) dle kódu
v netteForms.js – funkce nette.validateForm (lajna 81 ±) – by mělo
přeskočit validaci (resp. vrátit true, jakože prošla v pohodě), avšak
selže to na podmínce
if (form['nette-submittedBy'] && form.elements[form['nette-submittedBy']] && form.elements[form['nette-submittedBy']].getAttribute('formnovalidate')) {
return true;
}
jelikož
form.elements[form['nette-submittedBy']].getAttribute('formnovalidate')
je prazdny string, vraci false. Jednoduse to resi test hasAttribute
misto getAttribute
, avsak (alespon dle netbeansu) to neumi IE 6 a
7. Nebo generovat nejakou neprazdnou hodnotu toho atributu
formnovalidate
.
Testováno na FF 3.6.10, PHP 5.2.11, Nette Framework 2.0-dev (revision ecc11df released on 2010–09–30), nonprefix
- Bertram
- Člen | 75
Ahoj,
stáhl jsem si Nette Framework 2.0-dev (revision bb2b723 released on
2011–02–06)
a po použítí
public function createComponentPTPForm ($name)
{
$form = new AppForm ($this,$name);
...
$form->addSubmit('cancel', 'Cancel')
->setValidationScope(FALSE)
->onClick[] = array($this, 'cancelClicked');
return $form;
je po stisknutí tlačítka Cancel validace stále funkční.
Poradíte někdo prosím?
- Matúš Matula
- Člen | 257
Rovnaky problem u mna, pouzivam
1.0-dev 3fe360f released on 2010-08-25
.
Vo funkcii Nette.initForm
v netteForms.js
sa na submit
tlacitku nespusti onclick
event a preto sa nenastavi ani
form['nette-submittedBy']
. Testovane v Chrome 10 a Firefox 4.
(Vo vseobecnosti ked kliknem na submit tak sa onclick event na formulari
nespusti)
Skusal som googlit, ale nic relevantne som nenasiel, any ideas?
- duke
- Člen | 650
Právě se mi stal tentýž problém, jak píše Kapcus:
form[‚nette-submittedBy‘] se nenastavil a cancel tlačítko, s vypnutou
validací si vesele validovalo dál.
Nakonec to bylo tím, že formulář byl vykreslován ručně (přes form makro)
a v šabloně byl přebytečný uzavírající tag </fieldset>. Byl
celkem oříšek to najít, takže pokud se někomu stane tento problém,
počítejte s tím, že příčinou může být také chyba v html.
- uestla
- Backer | 799
Zdravím!
Narazil jsem na zajímavý problém, na stránce používám pro klientovou
validaci právě skript netteForms.js
. V něm se na formuláře
navěšují 2 eventy, a sice submit
a click.
A teď nastává ten průšvih: Vypadá to, že se event „submit“ volá dříve než event „click“ (testováno v Google Chrome)!
Jaké jsou následky?
Kliknu-li na nevalidační tlačítko (ověřeno, že skutečně má atribut
„formnovalidate
“), spustí se event „submit“, jenže v tu
chvíli se spouští i validace – neboť tlačítko, kterým byl formulář
odeslán a podle čehož se tedy v submit eventu určuje, zda se má validovat,
se nastavuje až v eventu click.
Jak sto hoven?
EDIT:
Přidám ještě jeden poznatek, a sice že o správnosti svého tvrzení jsem se přesvědčil také tak, že po opětovném kliknutí na ono nevalidační tlačítko se již validace neprovede, neboť to už má formulář správně nastaveno odesílací tlačítko (právě z oné předešlé neúspěšné interakce). Je třeba ovšem kliknout dvakrát po sobě, nikoli jednou, pak jinam do formuláře a podruhé, jinak se nastavení tlačítka ztratí.
<OT>
K čemu je property noValidate
? </OT>
Editoval uestla (26. 8. 2011 3:11)
- uestla
- Backer | 799
V jakém smyslu onen „ajaxSubmit“? Jestli ho používám? Ano, používám, ale o tom ten problém není. Při prvním kliknutí se JS validace provede, při druhém dojde k AJAXovému odeslání se správnou detekcí odesílacího tlačítka.
Čili problém skutečně je v pořadí volaných eventů. Bohužel jsem nepřišel na to, jakým způsobem se to dá změnit :-(
- uestla
- Backer | 799
Omlouvám se, zkusil jsem osekat na nutné minimum, a ukázalo se, že problém je v mém navěšování vlastního click submitu na všechny submit buttony.
Omlouvám se za umělou globalizaci problému.
Nicméně budu muset problém vyřešit po svém, a sice přepsat navěšování ajaxSubmitu (zde jsem narazil na pár odkazů, tak to zkusím pofackovat…).
- uestla
- Backer | 799
Netuším, nakonec jsem ale (huff) dospěl ke zdárnému konci.
Díky slepení HosipLanových pastebin skriptů a drobných zásahů do nich.
- zelenomodrypes
- Člen | 11
Pracuji s verzí 2.0-dev d5b50dc released on 2011-06-03
a mám
podobný problém:
$form->addSubmit('cancel', 'Zpět')
->setValidationScope(false);
$form->onSuccess[] = callback($this, 'onSuccessForm');
Po kliknutí na tlačítko Zpět je JS validace sice vynechána, ale v PHP již proběhne a dojde ke znovu zobrazení formuláře s chybovými hláškami.
Můžete někdo potvrdit, že tento problém nemám jenom já, tj. že jsem něco nepřehlédnul? Případně jak toto řešit?