DatePicker – problém s js validací

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
zopper
Člen | 20
+
0
-

Řešil jsem teď následující problém při kombinaci DatePicker (http://nette.merxes.cz/date-picker/) + Live Form Validation (z rychlého testu a mých znalostí to vypadá, že stejně se chová i při použití standardního NetteForms.js):

Pokud nastavím jakékoliv pravidlo pro $form->addDatePicker(), tak se sice do HTML vloží, ale při spuštění skriptu pro navázání jQuery na input podle návodu dojde k jejich ztrátě a datum se validuje pouze na serveru (a při použití ajaxu to pak přestane fungovat úplně).

Problém je v následující části kódu:

<script type="text/javascript">
if (el.attr("type") == "date") {
      var tmp = $("<input/>");
      $.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","), function(i, attr)  {
          tmp.attr(attr, el.attr(attr));
      });
      el.replaceWith(tmp);
      el = tmp;
}
</script>

Konkrétně se nahradí původní element novým (aby nevyskakoval html5 kalendář), ale nepřenesou se validační podmínky! Je potřeba do toho dlouhého řetězce v $.each() přidat hodnotu data-nette-rules, případně i další data-nette-xxx.

Tímto tedy prosím Honzu Tvrdíka o opravu jeho návodu a dávám to sem jako informaci, která se může hodit i u jiných doplňků. :-)

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkusil jsem do návodu doplnit řádek

tmp.data(el.data());

Dej vědět, jestli ti to s ním funguje správně.

zopper
Člen | 20
+
0
-

Nefunguje – buďto se handler připojuje až později, nebo validátor čte atributy při každém ověřování (nebo mi to tak připadá).

LuBoss
Člen | 21
+
0
-

Doplněk funguje pěkně, jenom se mi také bohužel nepřenesou validační podmínky a validace v JS nemaká. Kdyby se to panu autorovi – Jendovi Tvrdíkovi povedlo vyřešit, děkoval bych ještě více, než nyní.

wb2009
Člen | 125
+
0
-

Zdravím,

měl jsem tentýž problém a vyřešil jsem ho takto:

Při zadávání políčka zadat klasicky addText + přidat class např. date

$form->addText('date','Datum směny:')->addRule($form::FILLED, 'Zvolte datum')->setAttribute('class', 'date');....

kód navázání jquery na input místo input.date zvollit toto:

  $(".date").each(function () {...

tím pádem všechny inputy s třídou date spustí datepicker + navíc nette forms bude validovat i na straně klienta.

Třeba to někomu pomůže…