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
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*
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
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?
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.
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";
}
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�?
Bezedura, porneL juďż˝ o tym pisaďż˝: <form onsubmit>
NTG -> pl.comp.lang.javascript
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
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.
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 :-)
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.
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
;)
> 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? :-)
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. :-)