Podivné rozdělení validací: Nette js vs. HTML 5

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

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
+
0
-

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
+
0
-

„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:&quot;Zadejte sv\u00e9 jm\u00e9no&quot;}" 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:&quot;Zadejte Va\u0161e heslo&quot;}" /></td>
</tr>

<tr>
	<th>&nbsp;</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>&nbsp;</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
+
0
-

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í.

viz https://forum.nette.org/…-formularich

Patrik Votoček
Člen | 2221
+
0
-

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ě.

redhead
Člen | 1313
+
0
-

@vrtak-cz: Můžeš, prosím, odkázat na řádek kde se ta HTML5 validace v netteForm.js vypíná? Nikde to tam nevidím.

Patrik Votoček
Člen | 2221
+
0
-

nemůžu protože jsem zdrojáky nestudoval tuhle informaci jsem pochytil na nějaké Davidově přednášce.

redhead
Člen | 1313
+
0
-

Áaaha, sorry, měl jsem v záložkách odkaz na historii commitů na tenhle soubor (kvůli reflexi změn do live validace), ale soubor byl přemístěn. Říkal jsem si, že se poslední dobou nic neděje :)

Tomáš Votruba
Moderator | 1114
+
0
-

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
+
0
-

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
+
0
-

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

hrach
Člen | 1838
+
0
-

lol, měl jsem si vsadit, že to je „feature“ opery ;) měl by si začít používat nějaký „prohlížeč“ ;-)

Tomáš Votruba
Moderator | 1114
+
0
-

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)