Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Jak prawidłowo submitować formularz HTML?

1 view
Skip to first unread message

Marek

unread,
Jun 10, 2009, 10:51:55 AM6/10/09
to
Witam,

Jak w spos�b elegancki rozwi�za� nast�puj�cy problem:

1. Formularz zawiera pola tekstowe i 2 buttony. Pierwszy z button�w nazywa
si� "zaktualizuj wybrany rekord" a drugi "ut�rz nowy rekord".
2. Chcemy aby enter na polu tekstowym wykona� akcj� domy�ln�, kt�ra mo�e by�
albo buttonem 1 albo 2gim.
3. To, kt�ry button jest domy�lny zale�y do akcji wcze�niej wykonanej przez
u�ytkownika. Gdy zaznaczy� on rekord do aktualizacji wtedy domy�lnym
buttonem jest 1 lub je�li nie zaznacza� go to wtedy domy�lnym buttonem jest
2.

Obecnie realizuje to JS, kt�ry na podstawie analizy stanu formularza
aktualizuje pole action tego formularza ustawiaj�c w nim "?mode=update" lub
"?mode=create". Dodatkowo JS "pod�wietla" button domy�lny aby u�ytkownik
wiedzia� co zrobi enter. Je�li zrobi�bym pole hidden o nazwie mode i do
niego wpisywa� t� akcj� "update" lub "create", to nie dostrzegam korzy�ci z
tej zmiany (tu nawi�zuj� do wcze�niejszego mojego w�tku - to dla koleg�w
bior�cych w nim udzia�).

Do rozwa�a� we�my pod uwag� fakt, �e je�li oba buttony maj� sw�j atrybut
name, to w FF enter na polu tekstowym r�wnoznaczny jest z naci�ni�ciem
pierwszego buttona. W zmiennych POST pojawia siďż˝ zmienna zgodna z name tego
buttona. Natomiast w IE nie jest przesy�ana w POST �adna zmienna zwi�zana z
buttonem je�li fizycznie nie zostanie on naci�ni�ty.

Miniejszy w�tek ma zwi�zek z wypowiedzi� Pornela:

"Je�li nie wiesz, czy dobrze u�ywasz formularzy, to poszukaj "submit()"
- je�li masz go w kodzie, to �le u�ywasz formularzy."

--
Pozdrawiam,
Marek

--
Pozdrawiam,
Marek

Krzysztof Warunek

unread,
Jun 10, 2009, 1:03:27 PM6/10/09
to
Marek pisze:

> Witam,
>
> Jak w spos�b elegancki rozwi�za� nast�puj�cy problem:
>
> 1. Formularz zawiera pola tekstowe i 2 buttony. Pierwszy z button�w
> nazywa si� "zaktualizuj wybrany rekord" a drugi "ut�rz nowy rekord".

tego nie rozumiem. jedno pole dwa przyciski;)

puszczasz normalnie formularz. a skrypt kt�ry go obs�uguje sprawdza czy
dane z "pole tekstowe" istniej� je�li tak to zmiana je�li nie tw�rz nowe.

Zalety:
brak JS


--
pozdrawiam,

Krzysztof Warunek

*In specialibus generalia quaerimus*

Artur Muszyński

unread,
Jun 10, 2009, 1:43:15 PM6/10/09
to
Marek pisze:

> Witam,
>
> Jak w spos�b elegancki rozwi�za� nast�puj�cy problem:
>
> 1. Formularz zawiera pola tekstowe i 2 buttony. Pierwszy z button�w
> nazywa si� "zaktualizuj wybrany rekord" a drugi "ut�rz nowy rekord".
> 2. Chcemy aby enter na polu tekstowym wykona� akcj� domy�ln�, kt�ra mo�e
> byďż˝ albo buttonem 1 albo 2gim.
> 3. To, kt�ry button jest domy�lny zale�y do akcji wcze�niej wykonanej
> przez u�ytkownika. Gdy zaznaczy� on rekord do aktualizacji wtedy
> domy�lnym buttonem jest 1 lub je�li nie zaznacza� go to wtedy domy�lnym
> buttonem jest 2.

Niestety, powa�na niedor�bka HTML: Nie mo�na ustawi� domy�lnego
przycisku submit. W og�le z tym jest zamieszanie, standard HTML chyba
tego nie precyzuje w �adnej wersji.

> Obecnie realizuje to JS, kt�ry na podstawie analizy stanu formularza
> aktualizuje pole action tego formularza ustawiaj�c w nim "?mode=update"
> lub "?mode=create". Dodatkowo JS "pod�wietla" button domy�lny aby
> u�ytkownik wiedzia� co zrobi enter. Je�li zrobi�bym pole hidden o nazwie
> mode i do niego wpisywaďż˝ tďż˝ akcjďż˝ "update" lub "create", to nie
> dostrzegam korzy�ci z tej zmiany (tu nawi�zuj� do wcze�niejszego mojego
> w�tku - to dla koleg�w bior�cych w nim udzia�).

Przede wszystkim, standardowym dzia�aniem powinno by� naci�ni�cie
jednego z przycisk�w. Dlatego najbardziej naturalne jest zasymulowanie
klikni�cia click(). Na serwerze wykrywaj, kt�ry przycisk nacisn��e�.

artur

Marek

unread,
Jun 10, 2009, 2:09:01 PM6/10/09
to
> tego nie rozumiem. jedno pole dwa przyciski;)

A teraz ja nie zaskoczy�em :)

> puszczasz normalnie formularz. a skrypt kt�ry go obs�uguje sprawdza czy
> dane z "pole tekstowe" istniej� je�li tak to zmiana je�li nie tw�rz nowe.

A jak zareagowaďż˝ z jednym przyciskiem na przypadek gdy ktoďż˝ wybierze rekord
do edycji lecz nie b�dzie chcia� go zaktualizowa� lecz na bazie zawartych w
nim danych zapisaďż˝ nowy rekord?

Marek

unread,
Jun 10, 2009, 2:27:10 PM6/10/09
to
> Niestety, powa�na niedor�bka HTML: Nie mo�na ustawi� domy�lnego przycisku
> submit. W og�le z tym jest zamieszanie, standard HTML chyba tego nie
> precyzuje w �adnej wersji.

Zdajesz sobie spraw�, �e ten w�tek powsta� wskutek Twojego "zarzutu"
wzgl�dem mnie w zakresie stosowania JS przy submitowaniu formularzy?
:-))))))

> Przede wszystkim, standardowym dzia�aniem powinno by� naci�ni�cie jednego
> z przycisk�w. Dlatego najbardziej naturalne jest zasymulowanie klikni�cia
> click(). Na serwerze wykrywaj, kt�ry przycisk nacisn��e�.

Hmmm... mo�na i tak ale to nie zadzia�a pod FF. Gdy mam w formularzu wi�cej
niďż˝ jeden button typu submit, to FF enter wykonany na polu tekstowym
traktuje jako klikni�cie pierwszego z tych button�w. Nie da si� wychwyci�
zdarzenia enter'a na polu tekstowym inaczej ni� implementuj�c na ka�dym z
nich obs�ug� zdarzenia onClick, a tego z oczywistych wzgl�d�w chcia�bym
unikn��.

Wariant drugi: nie stosujemy �adnych button�w typu submit. Zamiast tego
mogliby�my zastosowa� zwyk�e... ale wtedy nie da si� submitowa� formularza
inaczej jak wo��j�c z poziomu JS submit(), kt�rego nie nale�y stosowa� -
cytuj�c Twoje intencje z poprzedniego w�tku. Wi�c i ten wariant odpada.

Znam sztuczkďż˝ z zastosowaniem ukrytego buttona "submit" jako pierwszego w
kodzie. Tzn ukryty w sensie przesuni�cia poza ekran bo uczynienie go
niewidocznym pozbawia go funkcjonalno�ci w kt�rej� z przegl�darek. No ale to
wytrych a nie eleganckie rozwi�zanie, o kt�re pytam w w�tku.

Paweł Piskorz

unread,
Jun 10, 2009, 2:34:38 PM6/10/09
to
Marek pisze:

> Jak w spos�b elegancki rozwi�za� nast�puj�cy problem:
>
> 1. Formularz zawiera pola tekstowe i 2 buttony. Pierwszy z button�w
> nazywa si� "zaktualizuj wybrany rekord" a drugi "ut�rz nowy rekord".
> 2. Chcemy aby enter na polu tekstowym wykona� akcj� domy�ln�, kt�ra mo�e
> byďż˝ albo buttonem 1 albo 2gim.
> 3. To, kt�ry button jest domy�lny zale�y do akcji wcze�niej wykonanej
> przez u�ytkownika. Gdy zaznaczy� on rekord do aktualizacji wtedy
> domy�lnym buttonem jest 1 lub je�li nie zaznacza� go to wtedy domy�lnym
> buttonem jest 2.

Ustawiaj domy�lny submit jako pierwszy w kodzie, a w stylach nadaj mu
pozycj� tak �eby nie zmienia� miejsca w zale�no�ci od tego czy jest
domy�lny, czy nie. Albo zr�b pola radio do wyboru akcji, tyle �e to mo�e
by� m�cz�ce przy cz�stej zmianie.

> Do rozwa�a� we�my pod uwag� fakt, �e je�li oba buttony maj� sw�j atrybut
> name, to w FF enter na polu tekstowym r�wnoznaczny jest z naci�ni�ciem
> pierwszego buttona. W zmiennych POST pojawia siďż˝ zmienna zgodna z name
> tego buttona. Natomiast w IE nie jest przesy�ana w POST �adna zmienna
> zwi�zana z buttonem je�li fizycznie nie zostanie on naci�ni�ty.

A co to za problem? Zapisz domy�ln� akcj� w polu hidden.


--
message[autor="PablO"]::after {
content:"Pozdrawiam";
}

Marek

unread,
Jun 10, 2009, 3:04:25 PM6/10/09
to
> Ustawiaj domy�lny submit jako pierwszy w kodzie, a w stylach nadaj mu
> pozycj� tak �eby nie zmienia� miejsca w zale�no�ci od tego czy jest
> domy�lny, czy nie.

Jak w takim przypadku zmienia� button domy�lny jako skutek akcji
u�ytkownika? Inny button jest domy�lnym gdy u�ytkownik zaznaczy rekord do
edycji a inni zanim to zrobi.

> Albo zr�b pola radio do wyboru akcji, tyle �e to mo�e
> by� m�cz�ce przy cz�stej zmianie.

Tak, w�a�nie. Je�li s� 2 przyciski to najbardziej logicznie jest ��glowa�
ich domy�lno�ci�.

> A co to za problem? Zapisz domy�ln� akcj� w polu hidden.

A co w takim przypadku z FF? Je�li albo zrobimy enter na polu tekstowym albo
klikniemy pierwszy w/g po�o�enia w kodzie button typu submit to efekt b�dzie
taki sam z punktu widzenia serwera: w zmiennych POST wyst�pi zar�wno ukryte
pole jak i name tego nie-kliknietego przycisku. Jak to rozr�ni�?

Paweł Piskorz

unread,
Jun 10, 2009, 3:09:37 PM6/10/09
to
Marek pisze:

> Hmmm... mo�na i tak ale to nie zadzia�a pod FF. Gdy mam w formularzu
> wi�cej ni� jeden button typu submit, to FF enter wykonany na polu
> tekstowym traktuje jako klikni�cie pierwszego z tych button�w. Nie da
> siďż˝ wychwyciďż˝ zdarzenia enter'a na polu tekstowym inaczej niďż˝
> implementuj�c na ka�dym z nich obs�ug� zdarzenia onClick

Bezedura, porneL juďż˝ o tym pisaďż˝: <form onsubmit>
NTG -> pl.comp.lang.javascript

Paweł Piskorz

unread,
Jun 10, 2009, 3:13:49 PM6/10/09
to
Marek pisze:

>> Ustawiaj domy�lny submit jako pierwszy w kodzie, a w stylach nadaj mu
>> pozycj� tak �eby nie zmienia� miejsca w zale�no�ci od tego czy jest
>> domy�lny, czy nie.
>
> Jak w takim przypadku zmienia� button domy�lny jako skutek akcji
> u�ytkownika? Inny button jest domy�lnym gdy u�ytkownik zaznaczy rekord
> do edycji a inni zanim to zrobi.

Je�eli ta akcja �aduje now� stron�, to gdzie tu widzisz problem?

>> Albo zr�b pola radio do wyboru akcji, tyle �e to mo�e
>> by� m�cz�ce przy cz�stej zmianie.
>
> Tak, w�a�nie. Je�li s� 2 przyciski to najbardziej logicznie jest
> ��glowa� ich domy�lno�ci�.

To mo�e by� ciut myl�ce, raz domy�lne jest to, raz co� innego.

>> A co to za problem? Zapisz domy�ln� akcj� w polu hidden.
>
> A co w takim przypadku z FF? Je�li albo zrobimy enter na polu tekstowym
> albo klikniemy pierwszy w/g po�o�enia w kodzie button typu submit to
> efekt b�dzie taki sam z punktu widzenia serwera: w zmiennych POST
> wyst�pi zar�wno ukryte pole jak i name tego nie-kliknietego przycisku.
> Jak to rozr�ni�?

if :P

Marek

unread,
Jun 10, 2009, 3:16:09 PM6/10/09
to
Sorki, dzi� ci�ko rozumuj�.
W�a�nie dotar�o do mnie przes�anie. Zawarto�� hiden przecie� inna b�dzie
:-))))

A tak na marginesie to mo�na zmienia� warto�� value domy�lnego czyli
pierwszego submita. Wtedy nie trzeba wprowadza� dodatkowego pola. Oczywi�cie
nale�y wtedy ciut wi�cej kodu po stronie serwera u�y� aby sprawdza� oba
przypadki: submit przez IE oraz submit przez pozosta�e. Przypomn�, �e w IE
nie zostanie przes�ana zmienna zwi�zana z przyciskiem o ile go fizycznie nie
naci�niemy.

Marek

unread,
Jun 10, 2009, 3:29:50 PM6/10/09
to
> Je�eli ta akcja �aduje now� stron�, to gdzie tu widzisz problem?

Szybciej mi odpowiedzia�e� ni� ja sobie poni�ej :-)

> To mo�e by� ciut myl�ce, raz domy�lne jest to, raz co� innego.

Wcale nie koniecznie i to z 2 powod�w:
1) gdy wybierzemy rekord do edycji to spodziewamy si�, �e enter go
zaktualizuje natomiast je�li go nie wybierzemy - to spodziewamy si�, �e
tworzymy nowy
2) button domy�lny zostanie graficznie wyr�niony


> if :P

tak tak z�o�liwcze :-D
W�a�nie na to pytanie sobie odpowiedzia�em :-)

Marek

unread,
Jun 10, 2009, 3:32:10 PM6/10/09
to
> Bezedura, porneL juďż˝ o tym pisaďż˝: <form onsubmit>

onsubmit nie rozr�ni pochodzenia klikni�cia w sensie enter kontra
naci�ni�cie przycisku w formularzu. Dlatego metoda jak� zaproponowa�e� w
inne ga��zce tej dyskusji jest w�a�ciwsza.

> NTG -> pl.comp.lang.javascript

Niezupe�nie NTG - zadaj�c pytanie nie wspomina�em o u�ycu JS tylko og�lnie o
podej�cie. W dyskusji wysz�o, �e JS.

Krzysztof Warunek

unread,
Jun 10, 2009, 3:42:28 PM6/10/09
to
Marek pisze:

>> tego nie rozumiem. jedno pole dwa przyciski;)
>
> A teraz ja nie zaskoczy�em :)

nie zrozum mnie �le ale z pola tekstowego nie ma jak wybiera� co
najwy�ej wpisa� - i tu zak�adasz ju� poprawno�� danych je�li jednak
sprawdzasz to co za problem oprogramowaďż˝ wszystko serverside

>> puszczasz normalnie formularz. a skrypt kt�ry go obs�uguje sprawdza
>> czy dane z "pole tekstowe" istniej� je�li tak to zmiana je�li nie
>> tw�rz nowe.
>
> A jak zareagowaďż˝ z jednym przyciskiem na przypadek gdy ktoďż˝ wybierze
> rekord do edycji lecz nie b�dzie chcia� go zaktualizowa� lecz na bazie
> zawartych w nim danych zapisaďż˝ nowy rekord?

ok z mojej strony EOT, bo pom�c nie pomoge a tylko bede cisn�� �e
problem lezy w projekcie tego czegoďż˝ a nie w css,html czy js

;)

Marek

unread,
Jun 10, 2009, 3:56:14 PM6/10/09
to
Tak na marginesie - Pawe� ju� pom�g� mi rozwi�za� problem.

> nie zrozum mnie �le ale z pola tekstowego nie ma jak wybiera� co
> najwy�ej wpisa� - i tu zak�adasz ju� poprawno�� danych je�li jednak
> sprawdzasz to co za problem oprogramowaďż˝ wszystko serverside

Ok, mo�e niepotrzebnie skr�ci�em rozwa�ania. Pod poj�ciem wybrania rekordu
do edycji rozumiem klikni�cie na pozycji w tabeli z rekordami (np. z bazy
danych). Wtedy m.in. pola tekstowe wype�niaj� si� tre�ci� z wybranego
rekordu.

A co do oprogramowania server side to najpierw trzeba przygotowaďż˝
odpowiednio informacj� po stronie klienta. No i o tym etapie wspomina�em.

> ok z mojej strony EOT, bo pom�c nie pomoge a tylko bede cisn�� �e
> problem lezy w projekcie tego czegoďż˝ a nie w css,html czy js
>
> ;)

Tak czy owak dzi�kuj� za ch�ci :-)
O projekcie w�a�nie rozmawiamy :-) Konkretnie: jak zrobi� "elegancki"
projekt w sensie metodyki przygotowania informacji z formularza do wys�ania
na serwer. Przypuszczam, �e jeste� zwolennikiem wybierania rekordu do edycji
i samego edytora danych w odr�bnych skryptach i st�d niezrozumienie? :-)

Paweł Piskorz

unread,
Jun 10, 2009, 7:28:53 PM6/10/09
to
Marek pisze:

>> Bezedura, porneL juďż˝ o tym pisaďż˝: <form onsubmit>
>
> onsubmit nie rozr�ni pochodzenia klikni�cia w sensie enter kontra
> naci�ni�cie przycisku w formularzu.

Masz spos�b na sprawdzenie submita formularza i na klikni�cie przycisku,
wi�c ustali� czy posz�o enterem czy klikiem ju� nie powinno by� problemem.

Marek

unread,
Jun 11, 2009, 9:04:43 AM6/11/09
to
> Masz spos�b na sprawdzenie submita formularza i na klikni�cie przycisku,
> wi�c ustali� czy posz�o enterem czy klikiem ju� nie powinno by� problemem.

Tak, ju� wszystko jasne. Dzi�kuj� za pomoc. :-)

cgthfb

unread,
Oct 27, 2009, 6:24:17 PM10/27/09
to

kjbppecnw

unread,
Nov 15, 2009, 10:19:23 AM11/15/09
to

fdmjknzwgv

unread,
Nov 18, 2009, 8:40:29 PM11/18/09
to

pcziglym

unread,
Dec 20, 2009, 7:44:45 PM12/20/09
to
0 new messages