AJAX po přechodu na verzi 2.2
- kolsi
- Člen | 131
Ahoj, už několik dní si s tím lámu hlavu a nemůžu najít, kde je problém.
Přešli jsme z Nette 2.0 na Nette 2.2.7 a všechno funguje v pohodě. Nyní chci některé formuláře převést do AJAXu a ať dělám, co chci, tak nefunguje (resp. při stisku tlačítka se stránka stejně refreshne celá). Zajímavé je, že formuláře, kde už AJAX byl, fungují v pohodě, i když to vlastně dělám podle nich. Možná jsem jenom na něco zapomněl, tak prosím o nakopnutí :)
Jednoduché přidání tlačítka (refreshne celou stránku):
$this->addSubmit("test", "Test")->setAttribute('class', 'ajax')->onClick[] = function($button) { \Tracy\Debugger::log("test"); };
Pokud, ale k tlačítku přidám setValidationScope(FALSE), tak se AJAX provede správně.
A ještě drobnost (možná důležitá) – v kódu postaveném na Nette 2.0 to funguje dobře.
- kolsi
- Člen | 131
Tak to vypadá, že za to může tento řádek:
$this->addDate('date_start', 'Start date', DateInput::TYPE_DATE)->setRequired('Fill in start date.');
Pokud tam není (resp. tam je, ale bez pravidla setRequired), tak AJAX jede. U jiných polí setRequired funguje v pohodě, takže problém bude s tím datumem. K tomu používám doplněk DateInput.
Když tracuju ve Firebugu, tak se zastaví na chybě:
TypeError: elem.form.elements[elem.name] is undefined
https://***/2.1/js/netteForms.js
Line 47
kde proměnná „elem“ odpovídá právě tomu pickeru:
+ elem input#frm-projectForm-date_start.hasDatepicker property value = "16.1.2015" attribute value = "null"
jQuery1110035094418018632734 33
Setkal se s tím už někdo?
Editoval kolsi (16. 1. 2015 12:22)
- kolsi
- Člen | 131
I když asi nikdo nezná odpověď, tak jsem zjistil, že problém je v doplňku DateInput (resp. jQuery DatePicker) a netteForms.js z verze 2.2.
Normální situace bez DatePickeru:
<input id="frm-projectForm-date_start" type="date" value="2015-01-19" data-nette-rules="[{"op":":filled","msg":"Fill in start date."}]" required="" data-dateinput-type="date" name="date_start">
situace z DatePickerem je však následující, protože ten doplněk původní input rozdělí na dva, přičemž u prvního zruší atribut „name“. A to se nelíbí novému netteForms.js, které na tom vyhodí výjimku:
<input id="frm-projectForm-date_start" class="hasDatepicker" type="text" value="2015-01-19" data-nette-rules="[{"op":":filled","msg":"Fill in start date."}]" required="" data-dateinput-type="date">
<img class="ui-datepicker-trigger" src="***/2.1/images/icons/16px/cal.png" alt="..." title="...">
<input type="hidden" value="2015-01-19" required="" name="date_start">
Pokud do verze Nette 2.2 nahraju netteForms.js z verze 2.0, tak všechno funguje jak má.
- michal.lohnisky
- Člen | 64
Mám stejný problém. Navrhnul jsem pull request: https://github.com/…Input/pull/8
Hotfix, který mi funguje: https://github.com/…fe681b174717
Editoval michal.lohnisky (4. 2. 2015 10:50)