Zamknutí formuláře při odesílání
- ic
- Člen | 430
Byl jsem jednou svědkem toho jak uživatel odeslal formulář, a ještě před tím než stránka zareagovala našel v textu hrubku, opravil ji a pak se divil že ve výsledku opravena nebyla.
Od těch dob zamykám formuláře po kliknutí na ‚odeslání‘ tak že všem imputům přidám javascriptem atribut disabled.
Jenže nevím jak tohle řešení implementovat do nette (není tam už něco takového? niko jiný formuláře nezamyká?) narážím tu na javascriptovou validaci, hlavně na to že při selhání bych potřeboval formulář zase odemknout. Nevím jak tohle s validátorem propojit, případně jak tenhle script pověsit na onsubmit tak aby se vykonal až po javascriptové validaci.
EDIT:
To zamknutí submit inputu se hodí i pokud se formulář odesílá ajaxem…
což by mohlo uživatele přesvědčit o tom, že nekliknul správně a
přimět ho klikat na ‚odeslat‘ vícekrát.
Editoval ic (4. 8. 2010 14:15)
- ic
- Člen | 430
jQuery jsem zkoušel na zablokování submitu ajaxem odesílaného formuláře (form s class=„ajax“)
$("form.ajax :submit").live("click", function () {
$(this).attr('disabled', 'disabled');
$(this).ajaxSubmit();
return false;
});
jenže tady to zas koliduje s tím validátorem… pokud data nejsou ok tak není možnost opravy, protože submit už je zamknutý
- Lopata
- Člen | 139
Nete do každého <form>
přidá
<script>
onsubmit="return nette.validateForm(this)"
</script>
takže to
<script>
nette.validateForm(this)
</script>
můžeš „oifovat“ ve vlastním handleru.
P.S. nauč se používat jQuery tak, jak je nutné. Tj v tom tvém kódu
dvakrát proháníš objekt this
konstruktorem, což je zbytečné.
Nemluvě o tom, že místo $(this).attr('disabled', 'disabled');
ti this.disabled = true;
bohatě postačí… ;-)
Editoval Lopata (4. 8. 2010 15:07)
- David Grudl
- Nette Core | 8228
Hlavně nezapomeňte při neúspěšném AJAXovém odeslání ten formulář zase odemknout. Po určitém časovém intervalu je vhodné odemknout i ten neAJAXový.