nette.ajax a submit handler

monty
Člen | 66
+
+1
-

Ahoj.

Ve formuláři používám TinyMCE editor.
Před odesláním formuláře tudíž musím zavolat metodu save() na každém editoru, aby se mi aktualizoval obsah textarea.

Na formulář si tedy nalepím submit event handler a metodu zavolám.
Všechno OK.
Pokud ale chci formulář zpracovat ajaxem, handler neproběhne.

Někde jsem našel, že pokud chci řešit vlastní onsubmit logiku ajax formuláře, musím ho odeslat manuálně…

$("form").netteAjax();

Takže mě napadlo, že abych mohl dál využívat .ajax selector, udělám tohle…

netteAjax = $.nette.ext("init");
netteAjax.buttonSelector = null;
netteAjax.formSelector = null;

$.nette.init();

$(document).on("submit", "form", function(e) {
	e.preventDefault();

	tinymceSave();
	$(this).netteAjax(e);
});

Neprobíhá teď ale správně validace, protože ve formuláři mám víc submit tlačítek s různě nastaveným validationScope.

Poradí mi prosím někdo, jak by se to dalo řešit?

Díky
Petr

rkor
Člen | 62
+
0
-

Co využít extension pro nette ajax? https://github.com/…tte.ajax.js/#…

$.nette.ext('save', {
	before: function() {
		tinymceSave();
	}
});

Editoval rkor (13. 4. 2018 20:48)

monty
Člen | 66
+
+1
-

rkor napsal(a):

Co využít extension pro nette ajax? https://github.com/…tte.ajax.js/#…

$.nette.ext('save', {
	before: function() {
		tinymceSave();
	}
});

Ahoj.

Kdepak, to byla první věc, co jsem zkoušel.
Překvapilo mě, že to nefunguje, ale jakákoliv změna ve formuláři, kterou v before provedu, se v uložených hodnotách neprojeví.
Myslím, že se problém týká netteForms.
Zkoušel jsem tohle a se standardním inputem, abych se ujistil, že ta tiny funkce není nějak opožděná.
Proběhne to sice ještě před veškerým nette.ajax, ale hodnota se změněná neuloží.

Nette.validateForm = function(form) {
	alert(1);
	$("#frm-materialForm-title").val("xxx");
};
rkor
Člen | 62
+
0
-

Aha, to je blbý. A co třeba onblur?

<textarea onblur="this.tinymceSave()"></textarea>
monty
Člen | 66
+
0
-

rkor napsal(a):

Aha, to je blbý. A co třeba onblur?

<textarea onblur="this.tinymceSave()"></textarea>

Já mám tu save funkci teď nalapenou na keyup eventu tinyMCE, ale pokud budu chtít někdy keyup handler upravit, musím pamatovat i na ten save a je mi jasný, že na to časem zapomenu.
Proto bych si to chtěl definovat na tom submit, abych na to nemusel v budoucnu myslet.

Nevíš, jestli by se to dalo udělat někde na úrovni netteForms?