AJAXové odeslání formuláře po provedení změny ve formulářovém prvku (Nette 2.1)

James
Člen | 54
+
0
-

Zdravím,

lze nějakým způsobem provést odeslání formuláře prostřednictvím ajaxového požadavku. Mám vytvořenou továrnu na vytvoření formuláře:

public function createComponentLimit()
{
	$form = new Form();

	$limits = array(
		'100' => '100',
		'200' => '200',
		'300' => '300',
        );

	$form->addSelect('limit', 'Limit:' ,$limits)
		->setAttribute('class', 'ajax')
		->getControlPrototype()->onchange('submit();');

	// call method limitFormSucceeded() on success
	$form->onSuccess[] = $this->limitFormSucceeded;
	return $form;
}

kde jsem pomocí getControlPrototype() nastavil danému prvku při změně automatické odeslání formuláře. Nevím jestli se běžně tento způsob používá.

Teď ale k samotnému zAJAXování formuláře. Mám nalinkovaný do layoutu script od Vojtěcha Dobeše

Ve vlastním JS souboru provedenou inicializaci tohoho skriptu

$(function () {
    $.nette.init();
});

Prvku ve formuláři přiřazenu třídu ajax nevím jestli nemusí být třída ajax už v samotném formuláři.

Poté jsem se v obsluze odeslaného formuláře pokusil tímto způsobem zjistit jakým způsobem se požadavek provedl.

public function limitFormSucceeded($form)
{
	$values = $form->getValues();

	if($this->isAjax()) {
		dump('AJAX');
	} else {
		dump('HTTP');
	}
}

A nemůžu docílit toho, aby odeslání formuláře proběhlo ajaxově.

Děkuji za všechny rady.

Editoval James (10. 2. 2014 9:42)

Mysteria
Člen | 797
+
0
-

Třídu ajax musí mít celej formulář, ne jenom input.

James
Člen | 54
+
0
-

Mysteria napsal(a):

Třídu ajax musí mít celej formulář, ne jenom input.

Třída přidána celému formuláři, ale zdá se, že jsem stále nedosáhl touženého výsledku.

akadlec
Člen | 1326
+
0
-

Bohužel nikdo z nás tu nemá věšteckou kouli abychom věděli co ti to po změně vrací a co od toho očekáváš.

Jan Suchánek
Člen | 404
+
0
-

Proč to děláš tak složitě? Dej to submit() pryč a použíj tohle:


<script>

	// před init nebo za ale podle dokumentace :)

	$.nette.ext('onChange', {
	    	load: function (rh) {
			$("form.ajax").on("change", function(event){
				event.preventDefault();
				// a tady si dopiš lumpárny
				// ? $.nette.ajax(this.action);
			});
		}
	});
</script>

Nebo je to blbě?

Edit: Myslim, že to jde ještě jednodušeji: např. nečím takovým?

Ještě bacha někdy mi blblo v Safari odesílání v load (odesilalo se několikrát) a on(„change“ … jsem musel přesunout do init().

Editoval jenicek (10. 2. 2014 18:39)

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

Třídu ajax může mít formulář nebo i tlačítko, je to jedno. Pro tvé případy to ale musí být na formuláři, protože pokud je třída pouze na tlačítku, tak se naváže přes událost click, kterou ty obcházíš ručním vyvoláním submit().

RSS tématu Téma zavřeno