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
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
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;