AJAXové odeslání formuláře po provedení změny ve formulářovém prvku (Nette 2.1)
- James
- Člen | 54
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)
- Jan Suchánek
- Člen | 404
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š
- Gold Partner | 1316
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()
.