Zamknutí formuláře při odesílání

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ic
Člen | 430
+
0
-

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)

redhead
Člen | 1313
+
0
-

jQuery?

ic
Člen | 430
+
0
-

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
+
0
-

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)

ic
Člen | 430
+
0
-

@Lopata zajímavé řešení, ale funguje mi to tak, moc díky

David Grudl
Nette Core | 8228
+
0
-

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ý.