Google Groups Home
Help | Sign in
JS: SELECT ja "pakkovalinta", väritys
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  4 messages - Collapse all
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
Jori Mantysalo  
View profile
 More options Jul 22, 2:21 am
Newsgroups: sfnet.viestinta.www
From: Jori Mantysalo <jm58...@uta.fi>
Date: Tue, 22 Jul 2008 06:21:09 +0000 (UTC)
Local: Tues, Jul 22 2008 2:21 am
Subject: JS: SELECT ja "pakkovalinta", väritys
Jos sivulla on

<P><SELECT NAME="lempiruoka" ID="valinta">
<OPTION VALUE=1>Pannukakku</OPTION>
<OPTION VALUE=2>Hernekeitto</OPTION>
<OPTION VALUE=3>Maksapihvi</OPTION>
</SELECT>
<P><INPUT TYPE="submit" ID="nappi">

niin tunnetusti osa käyttäjistä ei huomaa tuota, ja pannukakku
tulee valituksi heillä koska se on listalla ensimmäinen. Niinpä
lisätään

<OPTION VALUE=0>(Valitse)</OPTION>

tai vastaavaa, ja sitten lomakkeen käsittelijä tarvittaessa kertoo
virheestä. Jos nyt aletaan hienostella JS:llä, niin voidaan vaihtaa
taustaväriä yms. Mutta onko se mahdollista tehdä oikeasti toimivaksi?

Ensinnäkin OPTION-otuksen CSS-määre toimii toisin kuin luulisi.

<OPTION VALUE=0 STYLE="color: red">(Valitse)</OPTION>

tarkoittaa ainakin FF3:ssa, että kun lista on avattuna (hiiren tai
Alt+alas -näppäilyn vuoksi), niin silloin ja vain silloin tuo teksti
on punainen. JS:llä voidaan viritellä jotain sellaista kuin

if (document.getElementById('valinta').selectedIndex == 0) {
    document.getElementById('valinta').style.color='red';
    document.getElementById('nappi').disabled=true;

} else . . .

Tässä tulee ongelmaksi jo heti alkuunsa se, että OnChange laukeaa
SELECT-elementissä hiirellä tai kun siitä poistutaan, mutta ei kun
listaa selataan näppäimistöllä. Tämä ei näytä kivalta. Lisäksi koko
"(valitse)" -kohta voisi poistua kun joku valinta on tehty. Vielä on
ongelmana se, että SELECT-elementin värin (tai taustavärin) muutos
vaikuttaa silloinkin kun valinta on auki.

Joku lienee kai jo toteuttanut tällaisen oikein?

Tein tästä demon, josta näkee ongelmat:
http://www.uta.fi/~jm58660/js-koe.html

--
"Mutta senhän takia Mäntysalo juuri olikin värvätty kokouksen
puhtaaksikirjoitustehtäviin: hänen tajunnanahtaudestaan ja
perehtymättömyydestään voisi olla enemmän vahinkoa jos hän oikeasti
yrittäisi esimerkiksin arvioida jotakin tai johtaa jotakin."    -- KS


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "SELECT ja "pakkovalinta", väritys" by Jukka K. Korpela
Jukka K. Korpela  
View profile
 More options Jul 23, 6:00 pm
Newsgroups: sfnet.viestinta.www
From: "Jukka K. Korpela" <jkorp...@cs.tut.fi>
Date: Thu, 24 Jul 2008 01:00:54 +0300
Local: Wed, Jul 23 2008 6:00 pm
Subject: Re: SELECT ja "pakkovalinta", väritys
Scripsit Jori Mantysalo:

> Jos sivulla on

> <P><SELECT NAME="lempiruoka" ID="valinta">
> <OPTION VALUE=1>Pannukakku</OPTION>
> <OPTION VALUE=2>Hernekeitto</OPTION>
> <OPTION VALUE=3>Maksapihvi</OPTION>
> </SELECT>
> <P><INPUT TYPE="submit" ID="nappi">

> niin tunnetusti osa käyttäjistä ei huomaa tuota, ja pannukakku
> tulee valituksi heillä koska se on listalla ensimmäinen.

Sopii siis hyvin ohjattuun demokratiaan! :-)

Tässä kaksi tapaa hoitaa ongelma (lyhyyden vuoksi LABEL-merkkaus yms.
jätetty pois kuten alkuperäisestä esimerkistäkin):

Tapa 1:

<SELECT NAME="lempiruoka" ID="valinta">
<OPTION VALUE=0 SELECTED>Valitse jokin seuraavista:</OPTION>
<OPTION VALUE=1>Pannukakku</OPTION>
<OPTION VALUE=2>Hernekeitto</OPTION>
<OPTION VALUE=3>Maksapihvi</OPTION>
</SELECT>

Tapa 2:

<SELECT NAME="lempiruoka" ID="valinta">
<INPUT TYPE=RADIO NAME="lempiruoka" VALUE=1>Pannukakku<BR>
<INPUT TYPE=RADIO NAME="lempiruoka" VALUE=2>Hernekeitto<BR>
<INPUT TYPE=RADIO NAME="lempiruoka" VALUE=3>Maksapihvi<BR>
<INPUT TYPE=RADIO NAME="lempiruoka" VALUE=0 CHECKED>Ei vielä valittu

Tällöin ei tunnu tarpeelliselta erottaa "nollavaihtoehtoa" esimerkiksi
värityksellä, mutta jälkimmäisessä tavassa se on tehtävissä helposti
(yhden SPAN-elementin avulla), koska sen teksti on tavallista sisältöä,
ei lomakkeen kenttää. Tavassa 1 se taas on yleensä valmiiksi eri tavalla
esitettynä kuin muut, joskaan ei ehkä halutulla tavalla...

--
Jukka K. Korpela ("Yucca")
http://www.cs.tut.fi/~jkorpela/


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jori Mantysalo  
View profile
 More options Jul 24, 5:44 am
Newsgroups: sfnet.viestinta.www
From: Jori Mantysalo <jm58...@uta.fi>
Date: Thu, 24 Jul 2008 09:44:00 +0000 (UTC)
Subject: Re: SELECT ja "pakkovalinta", väritys
Jukka K. Korpela <jkorp...@cs.tut.fi> kirjoitti:

>> <P><SELECT NAME="lempiruoka" ID="valinta">
>> <OPTION VALUE=1>Pannukakku</OPTION>
>> <OPTION VALUE=2>Hernekeitto</OPTION>
>> <OPTION VALUE=3>Maksapihvi</OPTION>
>> </SELECT>
>> niin tunnetusti osa käyttäjistä ei huomaa tuota, ja pannukakku
>> tulee valituksi heillä koska se on listalla ensimmäinen.
> Tässä kaksi tapaa hoitaa ongelma (lyhyyden vuoksi LABEL-merkkaus yms.
> jätetty pois kuten alkuperäisestä esimerkistäkin):
> Tapa 1:
> <SELECT NAME="lempiruoka" ID="valinta">
> <OPTION VALUE=0 SELECTED>Valitse jokin seuraavista:</OPTION>

Tämähän on sama kuin mitä esitin:

! Niinpä lisätään
! <OPTION VALUE=0>(Valitse)</OPTION>

Tai siis tietääkseni ainakin kaikilla selaimilla SELECT-listan 1.
OPTION on valittuna, ellei millään OPTIONilla ole SELECTED-merkintää.

> Tapa 2:
> <INPUT TYPE=RADIO NAME="lempiruoka" VALUE=1>Pannukakku<BR>
>  . . .
> <INPUT TYPE=RADIO NAME="lempiruoka" VALUE=0 CHECKED>Ei vielä valittu

RADIO-elementti toimii, jos lempiruokia on muutama. Mutta isommissa
listoissa (kotimaa, kotikunta etc.) se menee rumaksi.

Noilla saa kyllä homman siis hoidettua, kuten kirjoitinkin. Mutta entä
se hienostelupuoli?

--
"Mutta senhän takia Mäntysalo juuri olikin värvätty kokouksen
puhtaaksikirjoitustehtäviin: hänen tajunnanahtaudestaan ja
perehtymättömyydestään voisi olla enemmän vahinkoa jos hän oikeasti
yrittäisi esimerkiksin arvioida jotakin tai johtaa jotakin."    -- KS


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jukka K. Korpela  
View profile
 More options Jul 24, 8:25 am
Newsgroups: sfnet.viestinta.www
From: "Jukka K. Korpela" <jkorp...@cs.tut.fi>
Date: Thu, 24 Jul 2008 15:25:51 +0300
Local: Thurs, Jul 24 2008 8:25 am
Subject: Re: SELECT ja "pakkovalinta", väritys
Scripsit Jori Mantysalo:

>> <SELECT NAME="lempiruoka" ID="valinta">
>> <OPTION VALUE=0 SELECTED>Valitse jokin seuraavista:</OPTION>

> Tämähän on sama kuin mitä esitin:

> ! Niinpä lisätään
> ! <OPTION VALUE=0>(Valitse)</OPTION>

Paitsi että käytin SELECTED-määritettä, joka määrittelee vaihtoehdon
alkutilassa valituksi.

> Tai siis tietääkseni ainakin kaikilla selaimilla SELECT-listan 1.
> OPTION on valittuna, ellei millään OPTIONilla ole SELECTED-merkintää.

Asia on huomattavasti monimutkaisempi, mutta kieltämättä tässä
tapauksessa SELECTED-määritteen käyttö on lähinnä loogisuuden vaatimaa.
Toisaalta kun sitä käytetään, voidaan nollavalinta sijoittaa minne
halutaan, vaikka listan loppuun. Sinne voidaan sijoittaa vaikkapa
<OPTION VALUE=-1>Ei mikään edellä mainituista</OPTION>
<OPTION VALUE=-2>En osaa tai en halua sanoa</OPTION>
<OPTION VALUE=0 SELECTED>Valintaa ei vielä ole tehty</OPTION>

Tällöin voidaan erottaa erilaiset nollatapaukset ja saada tietoa, josta
voi olla apua lomakkeen kehittämisessä. Tapaus 0 on selvästi sellainen,
jossa kysymys täytyy tulkita kokonaan ohitetuksi eli ei voi tietää
mitään käyttäjän suhtautumisesta siihen. Tapaus -1 voi merkitä, että on
tarjottu liian vähän vaihtoehtoja. Tapaus -2 (jonka voisi vielä jakaa
osiin) voi merkitä, että kysymys koetaan liian vaikeaksi tai liian
tyhmäksi.

>> Tapa 2:

>> <INPUT TYPE=RADIO NAME="lempiruoka" VALUE=1>Pannukakku<BR>
>>  . . .
>> <INPUT TYPE=RADIO NAME="lempiruoka" VALUE=0 CHECKED>Ei vielä valittu

> RADIO-elementti toimii, jos lempiruokia on muutama. Mutta isommissa
> listoissa (kotimaa, kotikunta etc.) se menee rumaksi.

Paljon isompi ongelma on, että kun lista on iso, valinnan tekeminen
teknisesti on hankalaa joka tapauksessa - ja SELECT on hankala, koska se
luo ison pudotusvalikon, jossa on monenlaisia käytettävyysongelmia (jos
kohta pari etuakin, joita osa käyttäjistä osaa hyödyntää). Maan ja
kunnan valinta kannattaa joka tapauksessa yleensä tehdä tekstikentällä,
jos on tarkoitus tarjota valittavaksi esimerkiksi kaikki maailman maat
tai kaikki Suomen kunnat.

> Noilla saa kyllä homman siis hoidettua, kuten kirjoitinkin. Mutta entä
> se hienostelupuoli?

Kyselin rivien välissä, tarvitaanko sitä, ja yritin myös kertoa, että
tavassa 2 se on olennaisesti helpompaa hoitaa kuin tavassa 1. Syynä on
se, että SELECT-elementin toteutus on edelleen jäykkää, koska selaimet
yleisesti käyttävät järjestelmien valmiita rutiineita, joihin voidaan
vain osittain vaikuttaa CSS:llä.

Yksi vaihtoehto - joka on melko hankala mutta luultavasti vähemmän
hankala kuin skriptien käyttö tms. - on koodata valinta valintanapeilla
eli radio buttoneilla mutta CSS:llä muuntaa tällainen rakenne
ulkonaisesti pudotusvalikon tapaiseksi. Tosin siinäkin saattaa tulla
äitiä eikun skriptikieltä ikävä...

--
Jukka K. Korpela ("Yucca")
http://www.cs.tut.fi/~jkorpela/


    Reply    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2008 Google