Formulář s AJAXem se validuje i při ->setValidationScope(false)
- kycera
- Člen | 7
Zdravím, s nette i AJAXem začínám proto prosím o trpělivost u očividných blbostí. Mám nette 2.0.4 stable a PHP 5.3.
Používám formulář s HosipLanovým addDynamic potřebuji při stisknutí tlačítka pro přidání dalšího inputu stránku překreslit pomocí AJAXu, bez něj to funguje bez problémů ale po jeho přidání se stránka sice překresluje pomocí AJAXu správně nicméně se spustí validace formuláře a vyskočí okno s položkami, které je nutno zadat. Mám inkludované v sandboxu přítomné jQuery a netteForms a jQuery plugin a AJAXové formuláře od Jana Marka.
Tady je továrnička na formulář:
<?php
$presenter = $this;
$form = new Form();
$form->addText('name', 'Název fakulty:', 100, 100)
->addRule(Form::FILLED, 'Je nutné zadat název fakulty.');
$form->addText('acronym', 'Zkratka fakulty:', 15, 15)
->addRule(Form::FILLED, 'Je nutné zadat zkratku fakulty.');
$replicator = $form->addDynamic('new_type_edu', function (Container $container) use ($presenter) {
$container->addText('new_type_edu', 'Nové zaměření:', 100, 100);
}, 1);
$replicator->addSubmit('add_type', 'Přidat zaměření')
->setValidationScope(false)
->onClick[] = callback($this, 'MyFormAddElementClicked');
$replicator = $form->addDynamic('new_intrests', function (Container $container) use ($presenter){
$container->addText('new_intrest', 'Nový obor zájmu:', 100, 100);
}, 1);
$replicator->addSubmit('add_intrest', 'Přidat obor zájmu')
->setValidationScope(false)
->onClick[] = callback($this, 'MyFormAddElementClicked');
$replicator = $form->addDynamic('specification', function (Container $container) use ($presenter){
$container->addText('name', 'Název oboru:', 100, 100);
$container->addText('info', 'Informace o oboru:' , 100, 200);
}, 1);
$replicator->addSubmit('add_spec', 'Přidat obor')
->setValidationScope(false)
->onClick[] = callback($this, 'MyFormAddElementClicked');
if($this->chooser == 1){
$form->addSubmit('create', 'Přidat fakultu')->onClick[] = callback($this, 'processRecordForm');
} else {
$form->addSubmit('create', 'Upravit fakultu')->onClick[] = callback($this, 'processRecordForm');
}
$form->getElementPrototype()->class("ajax");
return $form;
?>
a script se kterým sem to rozchodil
<script>
jQuery.ajaxSetup({
cache: false,
dataType: 'json',
success: function (payload) {
if (payload.snippets) {
for (var i in payload.snippets) {
$('#' + i).html(payload.snippets[i]);
$('#' + i).find('form.ajax :submit').on('click', function(event) {
event.preventDefault();
$(this).ajaxSubmit();
});
$('#' + i).find('form').each(function() {
Nette.initForm(this);
});
}
}
}
});
// odesílání odkazů + stránkování
$('a.ajax, .paginator a').live('click', function (event) {
event.preventDefault();
$.get(this.href);
});
// odesílání formulářů
$('form.ajax').live('submit', function (event) {
event.preventDefault();
$.post(this.action, $(this).serialize());
});
// Toto dodáno na rozpoznání tlačítka
$('form.ajax :submit').on('click', function(event) {
event.preventDefault();
$(this).ajaxSubmit();
});
</script>
- Vojtěch Dobeš
- Gold Partner | 1316
Vyzkoušej nette.ajax.js
, ten by měl problémy s
setValidationScope(FALSE)
řešit. Stačí jej přilinkovat a pak
někde zavolat $.nette.init();
.
- kycera
- Člen | 7
Tak jsme si myslel, že už mám po problému, ale objevil se jiný problém s validací.
Při kliknutí na tlačítko pro přidáni inptu vše proběhne v pořádku přes AJAX, ale pokud kliknu na tlačítko pro odeslání formuláře AJAXově se odešle požadavek a provede se validace na straně serveru pokud nejsou splněny validační pravidla tak je v response vrácena celá stránka a v ní jsou příslušné validační errory, ale stránka díky AJAXu nepřekreslí.
Validace na straně klienta funguje do té doby než kliknu na tlačítko pro přidání inputu. Jak mám tedy nastavit aby v případě validace na straně serveru se stránka překreslila případně jak jinak zobrazit validační errory.
- bumprask
- Člen | 59
Mám podobný problém, po stisknutí tlačítka pro přidání dalšího inputu se pokaždé spustí validace na straně serveru. Nastavení ->setValidationScope(FALSE) povypíná pouze javascript validaci… Jak v tomto případě vypnout i tu otravnou serverovou validaci?
Editoval bumprask (13. 2. 2013 13:31)