live validace v jquery formu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Pavik
- Člen | 5
Ahoj,
mám problém s live validací ve vyskakovacím jquery formu – live validace
se neprovádí. Když form vložím normálně jako control do template, tak
validace fungují správně. Nevíte, kde je chyba? Díky moc.
v template mám:
<script>
// aktivace odkazu na zobrazeni dialogu
jQuery(function($) {
$('a.ajaxdialog').live('click', function(event) {
event.preventDefault();
$.post($.nette.href = this.href, function(data) {
// (mimo jine) injektovani formulare do HTML
$.nette.success(data);
// aktivace ajaxoveho submitu formulare
activateAjaxForm();
// zobrazeni formulare v dialogu
$("#snippet--adressForm").dialog({ height: 300, width: 400, modal: true });
}, "json");
});
});
// aktivace "ajaxoveho" formulare
function activateAjaxForm () {
$("#snippet--adressForm form :submit").click(function () {
$(this).ajaxSubmit();
$("#snippet--adressForm").dialog( "destroy" ); // po submitnuti zavreme dialog
return false;
});
}
</script>
<div id="ajaxDiv"><a n:href="getAdressForm!" class="ajaxdialog">Založit novou adresu</a></div>
{snippet adressForm}
<div id="AdressAjaxForm">
{if isset($showAdressForm)}
<div class="adress-form">
{form adressForm}
{control $form errors}
{control $form errors}
<table>
<tr>
<th>{label name /}</th>
<td>{input name}</td>
</tr>
<tr>
<th>{label surname /}</th>
<td>{input surname}</td>
</tr>
<tr>
<th>{label ulice /}</th>
<td>{input ulice}</td>
</tr>
<tr>
<th>{label mesto /}</th>
<td>{input mesto}</td>
</tr>
<tr>
<th>{label psc /}</th>
<td>{input psc}</td>
</tr>
<tr>
<th></br>{input set}</th>
</tr>
</table>
{/form}
</div>
{/if}
</div>
{/snippet}
Presenter – handle metoda linku
public function handlegetAdressForm() {
$this->template->showAdressForm = true;
if ($this->presenter->isAjax()) {
$this->invalidateControl('adressForm');
}
}
Presenter – form
protected function createComponentAdressForm()
{
$form = new Form();
$form->addText('name', 'Jméno:')
->addRule($form::FILLED, '')
->addRule($form::MAX_LENGTH, 'Maximlní délka jména je %i znaků', 30)
->addRule(Form::REGEXP, 'Jméno musí začínat velkým písmenem a může obsahovat pouze písmena', '/^[A-Z ÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ][a-z áčďéěíňóřšťůúýž]+$/')
->addRule($form::MIN_LENGTH, 'Minimální délka jména jsou 3 znaky', 3);
$form->addText('surname', 'Příjmení:')
->addRule($form::FILLED, '')
->addRule(Form::REGEXP, 'Příjmení musí začínat velkým písmenem a může obsahovat pouze písmena', '/^[A-Z ÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ][a-z áčďéěíňóřšťůúýž]+$/')
->addRule($form::MAX_LENGTH, 'Maximlní délka příjmení je %i znaků', 30)
->addRule($form::MIN_LENGTH, 'Minimální délka příjmení jsou 3 znaky', 3);
$form->addText('ulice', 'Ulice:')
->addRule($form::FILLED, '')
->addRule(Form::REGEXP, 'Špatný formát ulice', '/^(.*[^0-9]+) (([1-9][0-9]*))?([1-9][0-9]*[a-cA-C]?)$/');
$form->addText('mesto', 'Město:')
->addRule($form::FILLED, '')
->addRule(Form::REGEXP, 'Pole musí obsahovat pouze písmena', '/^[A-Za-z áčďéěíňóřšťůúýžÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ]+$/');
$form->addText('psc', 'PSČ:',5,5)
->addRule($form::FILLED, '')
->addRule(Form::REGEXP, 'Pole musí obsahovat pouze čisla', '/^[0-9]+$/');
$form->addSubmit('set', 'Uložit')
->getControlPrototype()->class('positive');
$form->onSuccess[] = $this->adressFormSubmitted;
return $form;
}
- macejko1
- Člen | 18
V prvom rade otestuj ci vobec funguje jQuery v tom vyskakovacom formulari. Staci ak pridas nejaky event na onFocus nejakeho inputu..
Respektive ma este napada, ze cez Firebug prejdi sablonu/formular a pozri ci su napojene handle eventy. Vloz formular ako {control} pozri sablonu ako ma vyzerat spolu s handlermi a potom skus to znovu pustit ako vyskakovaci formular a opat skontroluj sablonu. Podla mna tam tie handleri nebudu.