Live form validation – Vlastní vykreslení validace

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

Zdravím. Když vykresluji formulář „ručně“ pomocí latte maker, rozhodí se mi celá live validace formuláře tak, že se mi zprávy nezobrazují vedle formulářového prvku, ale až někde pod celým formlářem. Když formulář vykresluji klasickým způsobem pomocí {control nazevFormulare}, validace funguje v pohodě a vše se vykresluje jak má. Používám tento addon: live-form-validation for Nette 2.0

Mám tento latte kód:

<div class="page-obsah">
<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>
{form bleskForm}
    {control $form errors}

        {label text /} <span class=error></span><br />
        {input text}<br /><br />
        {input hasLink} Přilinkovat k bleskovce článek:<br />
	{input url}<br />
	{input pridat}

{/form}
</div>

Experimentoval jsem s tím různě, hledal i tady na fóru, ale nějak se mi nepovedlo najít řešení, které by řešilo můj problém. Předpokládám, že se do toho má nějaké latte makro přidat, které by zajistilo vykreslování zpráv validace vedle prvků, nebo nějak patřičně upravit javascript toho addonu.

Nemá někdo z vás už s tímto zkušenost a neporadil by mi, jak s tímhle zatočit?
Předem díky a pokud tu s tím spamuju, někde se to tady už řešilo, omlouvám se za duplicitní vlákno. I když jsem prohledával fórum, nějak jsem nenašel, co by řešilo můj problém.

Editoval JDC (5. 5. 2013 12:58)

tatyalien
Člen | 239
+
0
-

Jestli se nepletu, já si k tomu vytvořím prvek:

// IDPRVKU = nazev formulářového prvku + "_message"
<span id="IDPRVKU_message" class="form-error-message"></span>

Do toho spanu se totiž dáva live validace…

Editoval tatyalien (10. 5. 2013 10:53)

JDC
Člen | 19
+
0
-

Tohle funguje. Díky za pomoc. Jen jsem si to musel oštípat o to class=„form-error-message“, neboť mam v CSS k tomu classu přiřazeno :before, ve kterém se mi vykresluje ikona v podobě fontu. Teď už t funguje přesně tak, jak potřebuji. Díky

xciza
Člen | 194
+
0
-

Ahoj, mám stejná problém jako JDC. Form vykresluju manuálně a errory pomocí

{control $form errors}

ale když smažu tohle a k inputu přidám

<span id="IDPRVKU_message" class="form-error-message"></span>

Tak se mě validace nevykresluje vůbec. Něco se za ten rok změnilo?
Díky

EDIT: V mozille v konzoly to píše tuto chybu:

TypeError: rule.op is undefined


var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);

Editoval xciza (30. 4. 2014 12:32)

Endrju
Člen | 147
+
0
-

Ahoj, taky se připojuji k příspěvku přede mnou.

Ať už vykresluji manuálně nebo ne, vidím v konzoli firefoxu chybu:
TypeError: rule.op is undefined live-form-validation.js:402

395: Nette.toggleControl = function(elem, rules, firsttime) {
396:        rules = Nette.getRules(rules, elem);
397:        var has = false, __hasProp = Object.prototype.hasOwnProperty, handler = function() {
398:                Nette.toggleForm(elem.form);
399:        };
400:
401:        for (var id in rules) {
402:                var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
403:                rule.neg = op[1];
404:                rule.op = op[2];
405:                rule.condition = !!rule.rules;
406:                if (!rule.condition) continue;

Pokud pak formulář odešlu, zobrazí se vedle jednotlivých prvků chyby zpracované na straně serveru (JS validace neproběhne vůbec) a do konzole přiskoční další řádek s chybou:
TypeError: rule.op is undefined live-form-validation.js:215

212: Nette.validateControl = function(elem, rules, onlyCheck) {
213:        rules = Nette.getRules(rules, elem);
214:        for (var id in rules) {
215:                var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
216:                rule.neg = op[1];
217:                rule.op = op[2];
218:                rule.condition = !!rule.rules;
219:                var el = rule.control ? elem.form.elements[rule.control] : elem;

Co s tím?
Jediné co jsem udělal je, že jsem nalinkoval live-form-validation.js do layoutu, nic víc (jiné instrukce na stránce pluginu nevidím).

Editoval Endrju (3. 10. 2014 12:01)

galab
Backer | 74
+
0
-

je potřeba opravit dva řádky v soboru live-form-validation.js

215: var rule = rules[id][0] ? rules[id][0] : rules[id], op = rule.op.match(/(~)?([^?]+)/);

402: var rule = rules[id][0] ? rules[id][0] : rules[id], op = rule.op.match(/(~)?([^?]+)/);
Endrju
Člen | 147
+
0
-

@galab: díky, zabralo

galab
Backer | 74
+
0
-

Jelikož nefungovala validace emailu a dalších pravidel, pokusil jsem se poupravit na Nette 2.2

Editoval galab (3. 10. 2014 14:16)