DatePicker – problém s js validací
- zopper
- Člen | 20
Ř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
Zkusil jsem do návodu doplnit řádek
tmp.data(el.data());
Dej vědět, jestli ti to s ním funguje správně.
- wb2009
- Člen | 125
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…