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
+
0
-

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
+
0
-

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.