Nefunkční validace ajaxového formuláře
- Jack06
- Člen | 168
Dobrý den, mám problém s odesíláním ajaxového formuláře a nemohu přijít na to kde. Na stránce při načítání generuji přímo jeden formulář (frm-createQuestion) a poté pod něj ajaxem načítám ještě jeden formulář (frm-form12).
První formulář odesílám na keyup a u něko, když nevyhovuje pravidlo nette, tedy že musí být vyplněn text, tak mi to hodí správně alert, že musím text vyplnit. Bohužel u druhého to vůbec validaci nespustí, if($(this).ajaxSubmit()) { projde, ale formulář se ani k php obsluze nedostane. Ten ajax mi vrátí html code celé stránky na které aktuálně jsem.
JS na ajaxové odesílání:
var updateTimer;
$('#textInput').live("keyup", function(){
clearTimeout(updateTimer);
updateTimer = setTimeout('$("#frm-createQuestion").saveQuestion()', 500);
})
(function( $ ){
$.fn.saveQuestion = function() {
if($(this).ajaxSubmit()) {
var qid = $('#type_a option:selected').val();
$.ajax({
url: "?do=answerType&type="+qid,
dataType: 'json',
success: function(){
$('html').removeClass('busy');
}
});
}
return false;
};
})( jQuery );
$("form.qAjax").live("submit", function () {
if($(this).ajaxSubmit()) {
$(".popupField").fadeOut(function(){
$('#answerWrapper').html('');
$('#type_a').val('');
$('.format').hide();
$('.format2').hide();
$('#textInput').val('');
});
if(!$(this).closest("form").hasClass('notReset'))
$(this).closest("form").clearForm();
$('html').removeClass('busy');
}
return false;
});
$("form.qAjax :submit").live("click", function () {
if($(this).ajaxSubmit()) {
$(".popupField").fadeOut(function(){
$('#answerWrapper').html('');
$('#type_a').val('');
$('.format').hide();
$('.format2').hide();
$('#textInput').val('');
});
if(!$(this).closest("form").hasClass('notReset'))
$(this).closest("form").clearForm();
}
return false;
});
Vygenerované HTML:
Zkoušel jsem si různě debugovat podle alertu, vždy projdu přes řádek:
// validation
if (form.get(0).onsubmit && !form.get(0).onsubmit()) return null;
v pohodě, ale když mám alert u validací nette (nettForms.js ⇒ Nette.validateControl), tak mi nic nevyskočí, prostě validace se nespustí a nevím proč.
Děkuji za pomoc
- Jack06
- Člen | 168
Zjistil jsem že u tohoto formuláře když si přes consoli zkusím vypsat
jednotlivé kroky, tak mi toto:
form.get(0).onsubmit()
zahlásí:
form.get(0).onsubmit is not a function
[Zastavit při této chybě]
console.log(form.get(0).onsubmit());
Nejspíše se neaplikuje Nette.addEvent. Lze to nějak vyřešit? Zvláštní je že mi to ještě nedávno fungovalo ale nyní to už nefunguje..
Editoval Jack06 (26. 5. 2012 11:54)
- uestla
- Backer | 799
Problém je v tom, že Nette validace se navěšuje při načtení stránky, čili jakékoliv další připínání formulářů až po načtení automaticky validaci nenastavuje.
Osobně jsem to vyřešil následovně:
- zakomentoval jsem si v netteForms.js navěšení
netteForms.js
// ...
/* Nette.addEvent(window, 'load', function () {
for (var i = 0; i < document.forms.length; i++) {
Nette.initForm(document.forms[i]);
}
}); */
- a navěšuji ho ručně pomocí livequery
jquery.nette.js
// ...
$(function () {
$('form').livequery(function () {
var $this = $(this);
Nette.initForm($this[0]);
});
});
// ...