JS validace HTML5 inputu typu number

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

Ahoj,
mám input ve formuláři

$form->addText('zip_code', 'PSČ')
  ->setRequired('%label musí být vyplněno.')
  ->addRule(self::LENGTH, '%label musí obsahovat přesně %d číslic.', 5);

který renderuju v šabloně

<input n:name="zip_code" type="number">

Když pak políčko nevyplním, zobrazí se správně alert „PSČ musí být vyplněno.“. Pokud tam napíšu třeba „abc“, tak se opět zobrazí alert „PSČ musí být vyplněno.“, což se mi zdá pro uživatele matoucí, protože podmínka na vyplnění je splněná. Pokud se vstup změní třeba na „123“, pak už je alert podle očekávání „PSČ musí obsahovat přesně 5 číslic.“.

Pokud v šabloně změním typ „number“ na „text“, tak se JS validace chová podle mého očekávání, tzn. i při vstupu „abc“ vyhodí alert „PSČ musí obsahovat přesně 5 číslic“ (podmínka na vyplnění je splněná).

Chci se zeptat, jestli je to vlastnost nebo chyba. Testoval jsem na Nette 2.1.3.

Díky

David Matějka
Moderator | 6445
+
0
-

Myslim, ze tohle je „feature“ prohlizece. Pokud do pole „number“ zadas neco jinyho nez cisla, tak to prohlizec ignoruje

radas
Člen | 225
+
0
-

Pokud vypnu JavaScript, tak je pravda, že se takto chová HTML5 validace přímo v prohlížeči. Ale nějak nechápu, že se takto chová i nettí validátor. Leda že by prohlížeč předával nettí JS validaci opravdu informaci o tom, že input typu number není vyplněn, pokud obsahuje něco jiného než číslo.

s4muel
Člen | 92
+
0
-

ano, je to tak. ak je input type="number", tak jeho value je v pripade, ze tam zadas neciselnu hodnotu, prazdne. vyplnene sice je, ale document.getElementById('id').value je prazdny string

radas
Člen | 225
+
0
-

Tím se to vysvětluje. Díky!

David Grudl
Nette Core | 8228
+
0
-

To je ale dost prasárna… Dá se nějak zjistit skutečná hodnota?

radas
Člen | 225
+
0
-

Obávám se, že asi nikoliv.

David Matějka
Moderator | 6445
+
0
-

@dg: tady dole je hack se selection, ale ciste to asi nejde..