Jak nastavit submit:disabled po validním odeslání formuláře?
- Tomáš Votruba
- Moderator | 1114
Chci odeslat formulář, kde je nějaké pravidlo (např.
Form::FILLED
), a nastavit submit:disabled v případě úspěšné
validace. Už jsem to trochu probíral s Vojtou Dobešem a došli jsme
k něčemu takovému:
// my notes
$.nette.ext('disable-submit', {
start: function (xhr, settings) {
console.log(this); // nothing
if (settings.nette.isForm) {
this.submit = settings.nette.el.find('input[type="submit"]:disabled');
} else if (settings.nette.isSubmit) {
if (settings.nette.el.is(':disabled')) {
this.submit = settings.nette.el;
}
}
},
complete: function () {
console.log(this); // nothing
if (this.submit) {
this.submit.attr('disabled', false);
}
},
load: function () {
$('input[type="submit"]').on('click', function () {
if (Nette.validateForm(this) == true) { // alerts errors :(
$(this).attr('disabled', true);
}
// no form submit on success :(
});
}
});
Případně gist
Což bohužel nejde a nevím, kde sehnat patřičnou proměnnou form byl validně odeslán a poté formulář odeslat. Odesílání by mělo probíhat normálně (bez ajaxu).
- Vojtěch Dobeš
- Gold Partner | 1316
Snad vyřešeno :) – https://gist.github.com/…obes/4727143.
Využívám triku s data-ajax-pass
, kterým lze potlačit, aby
nette.ajax.js
automaticky zabil událost, která vyvolala request.
V tomto případě potlačuji zabití submit
, které si pak sám
ještě doobsloužím – disabluju tlačítko a sám událost zabíjím (jinak
by pokračovalo standardní odeslání formuláře).
Aby to fungovalo, a různé callbacky se nebyly a vyvolaly se ve správném
pořadí, musel jsem zjednodušit inicializaci. Pokud by to někdo protestoval,
zařadil bych ji takto zjednodušenou rovnou do masteru, protože pokud to
neovlivní zjištění odesílacího tlačítka ani třeba posílání
souřadnic z input[type=image]
, přijde mi to jako košer.
Ta část v complete
s oddisablováním tlačítka tam
pochopitelně být nemusí :). Zato delete this.submit
by tam
zůstat mělo.