Podivné rozdělení validací: Nette js vs. HTML 5
- Tomáš Votruba
- Moderator | 1114
Hrozně mě mate HTML5 validace, nejraději bych ji vypnul (zkusil jsem to pomocí ‚novalidate‘ k tagu <form>, ale to se deaktivuje i js nette validace).
Mám jednoduchý formulář:
<?php
$login_form = new Form;
$login_form->setAction('login.php');
$login_form->getElementPrototype()->id = 'login_form';
$login_form->addText('aLogin', 'Login:',15,30)
->addRule(Form::FILLED,'Zadejte své jméno');
$login_form->addPassword('aPassword', 'Heslo:',15,30)
->addRule(Form::FILLED,'Zadejte Vaše heslo');
$login_form->addCheckbox('permalogin',' trvalé přihlášení')->setValue(1);
$login_form->addSubmit('prihlaseni', 'Přihlásit');
?>
Když nevyplním aLogin, ozve se Nette js,
když vyplní aLogin a nevyplním aPassword, ozve se HTML 5. Jak to?
Co potřebuji? Dělat přes Nette js validaci, tedy vypnout HTML 5, ale ne veškerou validaci samotnou.
Opera 10, php 5.3, Nette: 2.0-dev
- ic
- Člen | 430
To je divné, tady by se žádné html5 tagy objevit neměly. Používám
poslední Verzi 2.0 Alpha 2 a s podobným formulářem mi žádné html5 tagy
nevzniknou… jen ty data-
atributy které samy o sobě nic
nedělají. Pokud neproběhla nějaká změna co by html5 ve formulářích
zapínala automaticky, tak nevím kde se tam vzalo. Jaké konkrétně html5 tagy
tam jsou?
- Tomáš Votruba
- Moderator | 1114
„Vyplivnutý“ formulář vypadá přímo takto (na delší reakci nemám čas, snad to stačí k rozboru):
<form action="login.php" method="post" id="login_form">
<table>
<tr class="required">
<th><label class="required" for="frm-aLogin">Login:</label></th>
<td><input type="text" size="15" maxlength="30" class="text" name="aLogin" id="frm-aLogin" required="required" data-nette-rules="{op:':filled',msg:"Zadejte sv\u00e9 jm\u00e9no"}" value="" /></td>
</tr>
<tr class="required">
<th><label class="required" for="frm-aPassword">Heslo:</label></th>
<td><input type="password" size="15" maxlength="30" class="text" name="aPassword" id="frm-aPassword" required="required" data-nette-rules="{op:':filled',msg:"Zadejte Va\u0161e heslo"}" /></td>
</tr>
<tr>
<th> </th>
<td><input type="checkbox" name="permalogin" id="frm-permalogin" checked="checked" /><label for="frm-permalogin"> trvalé přihlášení</label></td>
</tr>
<tr>
<th> </th>
<td><input type="submit" class="button" name="prihlaseni" id="frm-prihlaseni" value="Přihlásit" /></td>
</tr>
</table>
</form>
Mám totiž ještě problém s druhý formulářem, kde mám kontrolu
Form::FILLED
+ Form:REGEXP
, ale ono mi to převede na
HTML 5 věcičky, takže když je filled, tak jde dál a neřeší.
Zkoušel jsem Form::PATTERN
(můžete odkázat, vysvětlit?), ale
ten přesně nevím jak funguje (navíc nekontroluje možné znaky, ale
vyžaduje přítomnost všech explicitně vymezených znaků, jak jsem to
pochopil z Davidova uvedení). Zkoušel jsem hledat, ale krom stránky o jeho
uvolnění nikde nic není.
Pokud by tento příspěvek četl nějaký guru, který by chtěl vidět
jen zadání, aby mi sem napsal odpověď a tím vše
brilantně uzavřel, tak potřebuji zadávat do loginu i do hesla pouze
znaky A-Z,a-z,0–9,_,–, s tím, že login musí začínat znakem a jeho
délka musí být 2–30, heslo pak 5–30.
<?php
/* tady nějaký addText... */
/* Opera 10 */
/* ověření pro pouze A-Z, a-z, 0-9, "_" a "-" o délce 5-30 znaků */
->addRule(Form::PATTERN,'Tohle se snad ani nikde nezobrazuje...','[a-zA-Z0-9_-]{5,30}');
->setAttribute('title','Vaše jméno musí být dlouhé 5-30 znaků a může obsahovat pouze znaky A-Z, a-z, 0-9, "_" a "-"');
?>
Editoval Schmutzka (22. 1. 2011 1:34)
- redhead
- Člen | 1313
Hm, to mi přijde jako dost nevyžádaná vlastnost. David totiž implementuje i HTML5 validaci, ovšem jestli to dělá tenhle bordel, tak nevim nakolik se HTML5 validace vyplatí.
- Patrik Votoček
- Člen | 2221
implemetuje se HTML5 validace kterou má netteForms.js
za úkol vypnout a nahradit vlastní. Alespoň do chvíle než bude nativní
HTML5 validace dostupná všude a kvalitně.
- Patrik Votoček
- Člen | 2221
nemůžu protože jsem zdrojáky nestudoval tuhle informaci jsem pochytil na nějaké Davidově přednášce.
- Tomáš Votruba
- Moderator | 1114
Takže teď jsme ve slepém místě někde mezi HTML 5 validací, kterou nemůžeme vypnout, protože zruší aj Nette js validaci, a Nette js validací, která neumí vypnout HTML 5 validaci?
- bojovyletoun
- Člen | 667
chová se go stejně ve různých browserech? Mě to ukazuje nettí validaci v obou případech- zkopíroval jsem si první příspěvek a napsal echo $login_form
- Tomáš Votruba
- Moderator | 1114
Tak jsem rychle ozkoušel a docela překvapivý závěr (Win 7).
Opera 10: prázdný login → js hláška, vyplněný login → u hesla html 5 hláška
FF 4: prázdný login → js hláška, vyplněný login → projde
Chrome 8: prázdný login → js hláška, vyplněný login → projde
Doufám, že mám něco blbě, jinak je to hodně zlé, když je tam
podmínka Form::FILLED
- Tomáš Votruba
- Moderator | 1114
hrach napsal(a):
lol, měl jsem si vsadit, že to je „feature“ opery ;) měl by si začít používat nějaký „prohlížeč“ ;-)
Zřejmě si špatně přečetl/přehlédl obsah mé první a poslední zprávy. V úvodním formu jsou podmínky vyplnění na login a na heslo, Opera jako jediná ctí i druhou podmínku.
Ještě mne napadá, zda na to nemají vliv jiné js soubory, i když by to byl pochybný vliv (až budu mít chvíli vyzkouším). Nemáte s intervencí jiných js do Nette js validace zkušenosti?
Editoval Schmutzka (24. 1. 2011 0:50)