Validace formulářů – javascriptová kontrola se obejde

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

Narážím na zvláštní chování formuláře. Pokud je nevalidní, zobrazí se javascriptová hláška. To je v pořádku. Jenže čas od času se poté formulář i odešle, stránka se přenačte a nad formulářem se objeví i chyby ze server side kontroly.

Píšu čas od času, ale ono je to tak 50 na 50.

Zdá se mi, že to dělá pouze v Google Chrome. Žeby tedy buga v něm?

Verze

PHP 5.3.1
Nette 2.0-beta 24.8.2011
Google Chrome 17.0.942.0 dev-m

nanuqcz
Člen | 822
+
0
-

Já jsem se po přechodu na Nette 2.0 divil, že mi v prohlížeči funguje i klientská kontrola, přestože nemám připojený nette-forms.js (nebo jak se jmenuje). Zároveň mi přišlo zvláštní, že prohlížeč při klientské kontrole psal jiné hlášky, než jaké jsem měl nastavené v PHP.

No a bylo to tím, že Nette 2 vkládá do povinných inputů atribut required a ten si každý prohlížeč validuje po svém. Není to i tvůj případ? Máš do stránky vložené java-scripty pro kontrolu formulářů? :-)

josef.sabl
Člen | 153
+
0
-

Jojo, to jsou nové HTML 5 atributy a fungujou mi. Required není problém, ten se neodešle právě kvůli této browser side kontrole. Problémem je ale např. Form:EMAIL. Vyskočí javascriptová hláška „Zadejte platný e-mail“, když ji odkliknu, formulář se odešle, přenačte se stránka a nahoře nad formulářem se zobrazí „Zadejte platný e-mail“ (resp. anglická hláška z Nette, teď to nemám před sebou).

Dělá to opravdu pouze v Chrome, z toho usuzuju, že nedělám nic špatně a je to bug buďto v Chrome nebo v Nette.

Filip Procházka
Moderator | 4668
+
0
-

Nette formuláře ti nastavují, aby se HTML5 validace prohlížeče vypínala a nahrazují ji vlastní. Máš je vůbec přilinkované v šabloně? nette.forms.js

josef.sabl
Člen | 153
+
0
-

Ehh, máš pravdu v tom, že HTML5 kontrola je vypnutá a nezabírá mi. Pouze v případě, že vypnu js. To jsem v tom mém minulém postu popletl.

Ano, nette.forms.js mám přilinkované:

  • Javascriptové hlášky z nette.forms.js vyskakují (ve 100% případů), ale cca v padesáti procentech se pak navíc i odešle formulář a pak zafunguje i server side kontrola.
  • Problém jsem zaznamenal pouze v Google Chrome (dodávám, že mám dev channel), v ostatních prohlížečích funguje tak, jak má

Snažil jsem se najít nějakou pravidelnost v tom, kdy se tak děje. Mám takový lehký pocit, že když ve formuláři začnu klikat a něco vyplňovat, tak se chyba tolik neobjevuje. Problém se objevuje častěji v případě, že formulář nechám v default stavu. Ale jak říkám, je to jen lehký pocit, zaznamenané jsou i případy, které to vyvracejí.