Live validace ajaxového formuláře pro Nette 2.1

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

Ahoj, používám Nette 2.1 a jde mi o live validaci formulářů načtených ajaxem. (viz https://componette.org/search/?…)

Použil jsem novou verzi live-form-validation.js (od Robyera viz https://gist.github.com/Robyer/7948399)

A po ajaxovém načtení formuláře jej nabindoval (úpravou v jquery.nette.js) takto:

<script>

		success: function(payload) {
            $.nette.response(payload);

			// snippets
			if (payload.snippets) {
				for (var i in payload.snippets) {
					$.nette.updateSnippet(i, payload.snippets[i]);
				}
			}

// ---------- TOHLE JSEM PŘIDAL ------------
            for (var i = 0; i < document.forms.length; i++) {
                Nette.initForm(document.forms[i]);
            }
//-----------------------------


            $.nette.overrideOnclick();

		},
</script>

Validace nyní šlape, jenže přestalo fungovat odesílací tlačítko. Předpokládám, že Nette.initForm() „přebyl“ nabindované metody (které zařizovaly ajaxSubmit()) a s tím už teď neumím pohnout dál :-(

omachala
Člen | 20
+
0
-

A nakonec si sám odpovím. Jedná se drobnou chybu v live-form-validation.js

Stačí upravit:

<script>
Nette.initForm = function(form) {
    form.noValidate = 'novalidate';

    LiveForm.forms[form.id] = {
        hasError: false
    };
    Nette.addEvent(form, 'submit', function(e) {

        if (!Nette.validateForm(form)) {
            if (e && e.stopPropagation) {
                e.stopPropagation();
            } else if (window.event) {
                event.cancelBubble = true;
            }

            return false;
        }
    });
</script>

na

<script>
Nette.initForm = function(form) {
    form.noValidate = 'novalidate';

    LiveForm.forms[form.id] = {
        hasError: false
    };
    Nette.addEvent(form, 'submit', function(e) {

        if (!Nette.validateForm(form)) {
            if (e && e.stopPropagation) {
                e.stopPropagation();
            } else if (window.event) {
                event.cancelBubble = true;
            }

            return false;
        } else {
            return true;
        }
    });
</script>

tedy jen přídání return true;