Odeslání ajax formuláře tlačítkem mimo něj
- Bajaja
- Člen | 22
Ahoj, potřebuju odesílat formulář tlačítkem mimo něj.
{form dataForm class => 'ajax'}
{input data"}
{input save style="display: none"}
{input create style="display: none"}
{/form}
<button onclick="$('#frm-dataForm-save').click()">Ulož</button>
<button onclick="$('#frm-dataForm-create').click()">Vytvoř</button>
Používám nette 2.1, aktuální nette.ajax.js a netteForms.js. Data se na server odesílají, jenže při kliknutí na tlačítko odeslat se odeslání provede 2×. Také se mi neodesílá submit tlačítko, pouze data. Nevíte kde jak bych mohl tyto 2 věci vyřešit?
- Bajaja
- Člen | 22
Trigger se chová stejně jako .click(); a mousedown(); neudělá nic :-(
Zkoušel jsem to bez Nette v JsFiddle a tam se odešle obojí. Asi to bude někde něco v nette.ajax.js.
Zkoušel jsem i .submit() a to vyřeší to dvojité odesílání. Jen jestli to není moc hack.
Editoval Bajaja (23. 9. 2015 15:59)
- Bajaja
- Člen | 22
Nevíte jestli je někde ukázka použití nette.ajax.js? V JavaScriptu moc neumím a proto by se hodily konkrétní ukázky. Mám dojem, že mé odesílání formulářů pomocí ajaxu není uplně správné. Formulář se mi odesílá 2×. V 1. requestu je dokonce i to submit tlačítko, jenže se request po 30ms přebije dalším. Když jsem odebral formuláři třádu ajax a přidal jí tlačítku, funguje to obdobně. Komu tuhle třídu mám ideálně dát?
Proč se extensions pro nette.ajax.js přidávají ke každému ajaxovému požadavku a pak „vypínají“ pomocí data-aja-off, nebylo by jednoduší definovat naopak ty, kde se má extension spouštět?
Pokud si ajaxem odešlu formulář z modalu, který mi přidá záznam do tabulky pod ním. Chci si překreslit snippet „tu tabulku“. Dá se tato akce nějak elegantně navěsit na success response formuláře? Když to udělám pomocí extension, musím to pak u všech dalších ajaxu „vypínat“.
- Bajaja
- Člen | 22
Tak po dlouhém zkoušení jsem to vyřešel. Každopádně by bych si rád nechal vysvětlit proč to tak je.
Třídu .ajax jsem dal formuláři. Celé řešení je v tom, že javascriptově stisknutá tlačítka nevracela FALSE. Takže jsem jim nastavil onclick return false a obojí vyřešeno.
{form dataForm class => 'ajax'}
{input data"}
{input save style="display: none", onclick => 'return false;'}
{input create style="display: none", onclick => 'return false;'}
{/form}
<button onclick="$('#frm-dataForm-save').click()">Ulož</button>
<button onclick="$('#frm-dataForm-create').click()">Vytvoř</button>
- Michal Hlávka
- Člen | 190
Příště použij knihovnu, která ti dovolí zavolat metodu ajaxSubmit(), myslím, že by jste se vyhnuli téhle delší diskuzi. :-)