Rozpoznání tlačítek při odesílání ajaxového formuláře

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

Dobrý den,

potřebuji rozlišit tlačítka při odesílání ajaxového formuláře.
Běžně užívané if($form[‚save‘]->isSubmittedBy() nefunguje.

Díky.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Co používáte za ajaxovací skript?

Mirda
Člen | 35
+
0
-

ajax z Quickstartu

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Použij nette.ajax.js, ten rozpoznání odesílacího tlačítka řeší.

Mirda
Člen | 35
+
0
-

Díky za odkaz, ale nevím jak nette.ajax.js použít pro můj účel.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Nu, nainstaluj ho podle dokumentace. Pak se používá úplně stejně, jako ten chudáček z quickstartu, tedy stačí dát odkazu/formuláři CSS třídu ajax.

Mirda
Člen | 35
+
0
-

Tak jsem se k tomu zase dostal. Udělal jsem vše podle návodu a funguje to.
Teď potřebuji u konkrétního formuláře nastavit událost po submit.
Díky

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Je to otázka :) ?

Mirda
Člen | 35
+
0
-

Je. Byl bych rád, kdybys mi s tím pomohl.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

V tom případě by to chtělo upřesnit zadání. Netuším, s čím přesně chceš pomoct.

Mirda
Člen | 35
+
0
-

Jestli to chápu dobře, po nalinkování nette.ajax.js a zavedení $.nette.init() vše funguje ajaxově. Jde mi o to, jak se dostanu nějakou funkcí ke konkrétnímu submitu ve kterém si projdu od init do complete.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Stále úplně nerozumím, čeho přesně chceš dosáhnout?

Ajaxově funguje to, co má CSS třídu ajax.

Mirda
Člen | 35
+
0
-

Mám formulář v modálním okně. Odešlu ho a potřebuju po úspěšné validaci a submitu zavřít modal.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Ahá… takže po ajaxovém odeslání toho formuláře by se mělo zavřít modální okno, ve kterém ten formulář je. Můžeš to udělat dvěma způsoby. Buď to odeslání iniciovat manuálně (zavěsit se prostě klasicky pomocí jQuery na ten konkrétní formulář do události submit a odeslat ho ajaxově manuálně:

$('#my-form').netteAjaxOff().submit(function (e) {
	$(this).netteAjax(e).done(function () {
		// close modal
	});
});

Anebo si udělat nějakou chytrou extension, která bude detekovat, jestli šlo o formulář, a jestli byl v modálním okně, ale přijde mi to nutně méně výkonné.

To .netteAjaxOff() tam nemusí být, pokud tomu formuláři ani nebudeš dávat CSS třídu ajax.

Mirda
Člen | 35
+
0
-

Nějak se mi nedaří.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

To je mi líto.

Mirda
Člen | 35
+
0
-

Formuláři jsem zrušil ajax a okno se zavřelo. Ale já ho přece potřebuju mít ajaxový, jinak se nic dalšího neprovede.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Omlouvám se, ale místo vyměňování si milionu příspěvků na fóru bude lepší začít třeba ukazovat kód, o kterém se bavíme. Já jsem přeci ukázal, jak ho odeslat ajaxově.

Mirda
Člen | 35
+
0
-

Takhle jsem to rozjel s jquery.ajaxform.js.

<script>
$(function () {
        $("form.ajax :submit").click(function () {

                $(this).ajaxSubmit().done(function(payload){
                if(payload.message=='ok'){
                     $('#myModal').modal('hide');
                }

                });
                return false;
        });
});
   </script>
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Nu, a v čem můj kód nefungoval :)? Tam odeslání taky proběhne ajaxově. Kdybych ho teda měl úplně zkompletovat (nahradit ten komentář), tak takto:

$('form.ajax :submit').click(function (e) {
	$(this).netteAjax(e).done(function (payload) {
		if (payload.message == 'ok') {
			$('#myModal').modal('hide');
		}
	});
});

Pochopitelně znovu obalit do čekání $(function () { ....

Mirda
Člen | 35
+
0
-

Díky.
Ještě jsem se chtěl zeptat na chybovou hlášku ve webové konzoli, která se týká verze s jquery.ajaxform.js.
Na formulář jsem napojil Live Form Validation. Pokud kliknu na formulářové tlačítko save a formulář není validní, objeví se v konzoli tato hláška:
TypeError: $(…).ajaxSubmit(…) is null.

Dotaz: Mám s tím něco provést? Nějak to ošetřit?

Mirda
Člen | 35
+
0
-

Tak jsem to udělal takto:

<script>
$(function () {

        $("form.ajax :submit").click(function () {

               if(Nette.validateForm(this)){

                $(this).ajaxSubmit().done(function(payload){

                if(payload.message =='ok'){
                     $('#myModal').modal('hide');
                }

            });
                return false;
             }

        });
});
   </script>