-
1. Data: 2011-02-26 19:24:54
Temat: dziwne zachowanie formularza
Od: Jaro <j...@e...comd>
Wysyłam formularz i żeby user nie klikał kilka razy przycisku blokuję go
po kliknięciu submita. Wszystko działa ok do czasu aż użytkownik po
kliknięciu na przycisk zostanie przeniesiony do strony zapisującej dane z
formularza i żeby wrócić do formularza nie kliknie przycisku 'wstecz' w
przeglądarce. Wówczas coś dziwnego dzieje się z submitem. Po prostu nie
można wysłać wówczas formularza. Przycisk submita jest "nieczynny".
Nie pomaga nawet refresh strony. Żeby móc wysłać kolejne dane formularzem
strona gdzie jest formularz musi być wgrana od początku.
Wie ktoś dlaczego tak się dzieje?
function dodaj(form)
{
// sprawdzanie czy okreslone inputy sa wypełnione
....
// blokada przycisku submit formularza
vvv=document.getElementById('XV');
vvv.className='off';
vvv.value='add;
vvv.disabled=true;
// wysylka formularza
form.submit();
}
<form name="formularz" id="formularz" onsubmit="dodaj(this); return
false;" method="post" action="add.php">
...
<input id="XV" type="submit" class="submit" value="save">
-
2. Data: 2011-02-26 22:14:51
Temat: Re: dziwne zachowanie formularza
Od: porneL <n...@p...net>
On Sat, 26 Feb 2011 19:24:54 -0000, Jaro <j...@e...comd> wrote:
> Wysyłam formularz i żeby user nie klikał kilka razy przycisku blokuję go
> po kliknięciu submita. Wszystko działa ok do czasu aż użytkownik po
> kliknięciu na przycisk zostanie przeniesiony do strony zapisującej dane z
> formularza i żeby wrócić do formularza nie kliknie przycisku 'wstecz' w
> przeglądarce. Wówczas coś dziwnego dzieje się z submitem. Po prostu nie
> można wysłać wówczas formularza. Przycisk submita jest "nieczynny".
> Nie pomaga nawet refresh strony. Żeby móc wysłać kolejne dane formularzem
> strona gdzie jest formularz musi być wgrana od początku.
> Wie ktoś dlaczego tak się dzieje?
Refresh powinien pomagać.
Dzieje się tak, dlatego że formularz z wyłączonym submitem nie może być
wysłany. Twój .submit() to brzydki hack, który to omija, ale onsubmit nie
zostanie wywołany PO tym jak wyłaczysz submitowanie.
Stan formularza jest zachowywany przy przechodzeniu dalej/wstecz, więc
submit.disabled też.
<form onsubmit="var that=this; // bo js jest dziwny
setTimeout(function(){that.vvv.disabled=true},10);
setTimeout(function(){that.vvv.disabled=false},5000)
;
">
To wyłączy submit po wysłaniu formularza i włączy go ponownie po 5
sekundach (inaczej w przypadku problemów z łącznością użytkownik ma
przechlapane).
--
regards, porneL
-
3. Data: 2011-02-27 11:41:38
Temat: Re: dziwne zachowanie formularza
Od: Jaro <j...@e...comd>
>> Wie ktoś dlaczego tak się dzieje?
>
> Refresh powinien pomagać.
no właśnie na moim kompie nie pomaga zobaczę jak jest na innych.
> Dzieje się tak, dlatego że formularz z wyłączonym submitem nie może być
> wysłany. Twój .submit() to brzydki hack, który to omija, ale onsubmit
> nie zostanie wywołany PO tym jak wyłaczysz submitowanie.
> Stan formularza jest zachowywany przy przechodzeniu dalej/wstecz, więc
> submit.disabled też.
>
> <form onsubmit="var that=this; // bo js jest dziwny
> setTimeout(function(){that.vvv.disabled=true},10);
> setTimeout(function(){that.vvv.disabled=false},5000)
; ">
>
> To wyłączy submit po wysłaniu formularza i włączy go ponownie po 5
> sekundach (inaczej w przypadku problemów z łącznością użytkownik ma
> przechlapane).
czyli to też nie jest sposób na 100%?
Zastanawiam się czy najlepszym wyjściem nie jest zostawienie tego disabled
w spokoju i takie ustawienie w class submitOFF żeby button miał np. 1px -
1px, lub inne sposoby z buttonem. User jak mu button zniknie lub
przeniesie się w inne miejsce , lub wtopi z tłem nic już raczej nie
zdziała :)
<form action="zapisz.php" method="post" id="form1" name="form1"
onsubmit="vvv=document.getElementById('XV'); vvv.className='submitOFF';
vvv.value='wysyłam';">
-
4. Data: 2011-02-27 12:39:13
Temat: Re: dziwne zachowanie formularza
Od: porneL <n...@p...net>
On Sun, 27 Feb 2011 11:41:38 -0000, Jaro <j...@e...comd> wrote:
>> <form onsubmit="var that=this; // bo js jest dziwny
>> setTimeout(function(){that.vvv.disabled=true},10);
>> setTimeout(function(){that.vvv.disabled=false},5000)
; ">
>>
>> To wyłączy submit po wysłaniu formularza i włączy go ponownie po 5
>> sekundach (inaczej w przypadku problemów z łącznością użytkownik ma
>> przechlapane).
>
> czyli to też nie jest sposób na 100%?
>
> Zastanawiam się czy najlepszym wyjściem nie jest zostawienie tego
> disabled
> w spokoju i takie ustawienie w class submitOFF żeby button miał np. 1px -
> 1px, lub inne sposoby z buttonem. User jak mu button zniknie lub
> przeniesie się w inne miejsce , lub wtopi z tłem nic już raczej nie
> zdziała :)
Ale o to chodzi, żeby mógł wcisnąć go ponownie!
Wyobraź sobie scenariusz:
* wypełniasz jakiś upierdliwy formularz przez 20 minut
* wciskasz submit
* coś zakłóciło twoje Wi-Fi albo ISP pogubił pakiety i masz "ERROR!"
zamiast wysyłania formularza
* naprawiasz sieć
* chesz wysłać ponownie... a tu submit wyłączony/ukryty! I dupa! Siedzisz
przed wypełnionym formularzem, którego nie da się wysłać.
Dlatego submit trzeba blokować na kilka sekund, żeby dwuklikacze i
zniecierpliwieni nie wysyłali formularza wielokrotnie, ale nie można
blokować na zawsze.
--
regards, porneL
-
5. Data: 2011-02-27 13:19:41
Temat: Re: dziwne zachowanie formularza
Od: Jaro <j...@e...comd>
>> Zastanawiam się czy najlepszym wyjściem nie jest zostawienie tego
>> disabled
>> w spokoju i takie ustawienie w class submitOFF żeby button miał np. 1px
>> - 1px, lub inne sposoby z buttonem. User jak mu button zniknie lub
>> przeniesie się w inne miejsce , lub wtopi z tłem nic już raczej nie
>> zdziała :)
> Ale o to chodzi, żeby mógł wcisnąć go ponownie!
> Wyobraź sobie scenariusz:
> * wypełniasz jakiś upierdliwy formularz przez 20 minut * wciskasz submit
> * coś zakłóciło twoje Wi-Fi albo ISP pogubił pakiety i masz "ERROR!"
> zamiast wysyłania formularza
> * naprawiasz sieć
> * chesz wysłać ponownie... a tu submit wyłączony/ukryty! I dupa!
> Siedzisz przed wypełnionym formularzem, którego nie da się wysłać.
>
> Dlatego submit trzeba blokować na kilka sekund, żeby dwuklikacze i
> zniecierpliwieni nie wysyłali formularza wielokrotnie, ale nie można
> blokować na zawsze.
Nie ma idealnego sposobu. Ten podany przez Ciebie też ma poważną wadę.
Jeśli w formularzu jest np. zdjęcie czyli formularz wysyła się kilka/
naście/dziesiąt sekund to zablokowanie na np. 10 s. nic nie da bo nerwus
zdąży weń kliknąć jeszcze kilka razy :)
Bo przecież blokując Twoim sposobem formularz tak naprawdę nie wiesz jak
długo potrwa jego wysyłka.
-
6. Data: 2011-02-27 15:02:49
Temat: Re: dziwne zachowanie formularza
Od: Michał Gancarski <m...@g...com>
On Sat, 26 Feb 2011 19:24:54 +0000 (UTC), Jaro wrote:
> Wysyłam formularz i żeby user nie klikał kilka razy przycisku blokuję go
> po kliknięciu submita.
A nie powinieneś tego obsługiwać raczej po stronie serwera, wykrywając, czy
to jest to samo ale wysłane ponownie?
[...]
--
Michał Gancarski
-
7. Data: 2011-02-27 15:08:13
Temat: Re: dziwne zachowanie formularza
Od: Peter May <p...@o...pl>
W dniu 2011-02-27 14:19, Jaro pisze:
[...]
> Bo przecież blokując Twoim sposobem formularz tak naprawdę nie wiesz jak
> długo potrwa jego wysyłka.
Poczytaj o zdarzeniu onprogress. Wiele przeglądarek już je obsługuje. Za
pomocą nieco sprawdzisz ile jeszcze pozostało do załadowania pliku.
Wówczas dasz komunikat zwrotny dla użytkownika i będzie on wiedział ile
czasu musi jeszcze poczekać. Przykład:
http://www.3site.eu/jstests/upload/
--
Peter
-
8. Data: 2011-02-27 15:10:33
Temat: Re: dziwne zachowanie formularza
Od: Mirosław Zalewski <miniopl@CUT_THIS.gmail.com>
luty roku pamiętnego 2011, prawdopodobnie 27. Wielka mądrość na
czytelników pl.comp.www spłynęła, gdy tako rzekł(a) Jaro:
> Jeśli w formularzu jest np. zdjęcie czyli formularz wysyła się kilka/
> naście/dziesiąt sekund to zablokowanie na np. 10 s. nic nie da bo
> nerwus zdąży weń kliknąć jeszcze kilka razy :)
A nie ma możliwości poinformowania użytkownika że jego formularz jest
wysyłany?
Na tej samej zasadzie w galeriach pisanych w JS póki się zdjęcie ładuje
wyświetla się jakić symbol informujący o tym, że zdjęcie jest pobierane.
Poza tym chyba możesz dodawać jakiś identyfikator sesji żeby serwer
wiedział, że otrzymany formularz właśnie jest przetwarzany i żeby go
olać.
Jeśli np. użytkownik wysyła plik, to powinien być tam jakiś prosty
panel administracyjny do usuwania wysłanych plików. Żeby taki nerwus
jak przypadkiem wyśle obrazek dwa razy mógł ten nadmiarowy usunąć.
Przyznam szczerze, że dla mnie cały ten problem jest dość abstrakcyjny.
Formularze wysyłania plików mogą się długo wysyłać i tak jest w całym
Internecie. Jeżeli serwer potrzebuje dużo czasu na przetworzenie
jakichś danych od użytkownika, to warto w samym formularzu napisać, że
należy cierpliwie czekać kilkanaście sekund.
--
Niżej podpisany, zamieszkały w http://minio.xt.pl ,
Mirosław Zalewski
-
9. Data: 2011-02-27 15:15:45
Temat: Re: dziwne zachowanie formularza
Od: porneL <n...@p...net>
On Sun, 27 Feb 2011 13:19:41 -0000, Jaro <j...@e...comd> wrote:
>> Dlatego submit trzeba blokować na kilka sekund, żeby dwuklikacze i
>> zniecierpliwieni nie wysyłali formularza wielokrotnie, ale nie można
>> blokować na zawsze.
>
> Nie ma idealnego sposobu. Ten podany przez Ciebie też ma poważną wadę.
> Jeśli w formularzu jest np. zdjęcie czyli formularz wysyła się kilka/
> naście/dziesiąt sekund to zablokowanie na np. 10 s. nic nie da bo nerwus
> zdąży weń kliknąć jeszcze kilka razy :)
> Bo przecież blokując Twoim sposobem formularz tak naprawdę nie wiesz jak
> długo potrwa jego wysyłka.
Owszem. Wgrywanie zdjęć to trudniejszy problem. W takim przypadku
dodawałbym do formularza przycisk "Anuluj", który włącza submit.
--
regards, porneL
-
10. Data: 2011-02-27 18:49:30
Temat: Re: dziwne zachowanie formularza
Od: Jaro <j...@e...comd>
Dnia Sun, 27 Feb 2011 16:02:49 +0100, Michał Gancarski napisał(a):
> On Sat, 26 Feb 2011 19:24:54 +0000 (UTC), Jaro wrote:
>
>> Wysyłam formularz i żeby user nie klikał kilka razy przycisku blokuję
>> go po kliknięciu submita.
>
> A nie powinieneś tego obsługiwać raczej po stronie serwera, wykrywając,
> czy to jest to samo ale wysłane ponownie?
>
> [...]
Oczywiście, że tak robię. JS jest tylko na wszelki wypadek :)
Nie wiem tylko jak to jest czy jak user kliknie kilka razy przycisk submit
to czy formularz z wybraną fotką kilka razy się wyśle? O ile sam
formularz to pikuś o tyle już fotka jeśli ma powiedzmy 2MB kilka razy
wysłana to już jest niefajnie.