Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstiboksi suoraan aktivoituna

Sivun loppuun

punppis [05.08.2009 15:49:33]

#

Miten saa input textin samantien aktivoiduksi, kun sivu ladataan? Tarkoitan siis sitä, että siinä vilkkuu samantien se kursori, eikä sitä tarvitse erikseen klikata jotta siihen voi kirjoittaa.

Tumettaja [05.08.2009 15:58:09]

#

Näin pitäisi toimia:

window.onload = function () {
   document.getElementById("tekstiboxsi").focus();
}

Merri [05.08.2009 16:09:18]

#

Jos jaksat jonkun JavaScript-kirjaston ottaa käyttöön, esim. jQuery, niin sillä tuon saa toimimaan vielä aavistuksen paremmin. window.onload tapahtuu vasta sitten kun ihan kaikki sivulla on ladattu, kuvat mukaanlukien, joten tekstilaatikko saattaa joskus aktivoitua vasta pitkän hetkenkin sen jälkeen kun käyttäjä on voinut jo tehdä asioita sivulla. Kirjastoissa tähän on yleensä kiinnitetty huomiota, joten on mahdollista tehdä suht lyhyellä koodilla heti varsinaisen sivun latauduttua tarpeelliset toiminnot, eikä tarvitse odotella kuvia ym. tavaraa mitä sivulla on.

jQuery-esimerkki:

$(function(){
    $('#tekstiboksi').focus();
});

Kannattaa myös miettiä, onko mahdollista (tai järkevää) muuttaa HTML:n järjestystä siten, että laatikko aktivoituisi ensimmäisenä. Aina se ei tietenkään ole mahdollista, mutta joissakin tapauksissa on.

punppis [05.08.2009 16:13:21]

#

Ajattelin että tähän olisi ollut CSS:n tai HTML:n puolelta joku valinta. Näin ei ilmeisesti ole. Noh, pitänee tehdä javascriptillä sitten.

Merri kirjoitti:

Kannattaa myös miettiä, onko mahdollista (tai järkevää) muuttaa HTML:n järjestystä siten, että laatikko aktivoituisi ensimmäisenä. Aina se ei tietenkään ole mahdollista, mutta joissakin tapauksissa on.

Pystyykö tämän siis toteuttamaan jotenkin ilman js:ää, vaikka formi on keskellä sivua (toisinsanoen jokin elementti on jo ennen formia)?

Merri [05.08.2009 16:17:49]

#

Ei ole, kyseessä on toiminnallisuus, joten se on JavaScriptin heiniä.

punppis [05.08.2009 16:25:33]

#

Merri kirjoitti:

Ei ole, kyseessä on toiminnallisuus, joten se on JavaScriptin heiniä.

Jepjep. Minun logiikallani tämä olisi onnistunut kun kerran checkboxit ja raxdiobuttonitkin saa HTML:llä suoraan valittua. Noh, ei voi mitään.

Grez [05.08.2009 16:56:12]

#

punppis kirjoitti:

Jepjep. Minun logiikallani tämä olisi onnistunut kun kerran checkboxit ja raxdiobuttonitkin saa HTML:llä suoraan valittua. Noh, ei voi mitään.

Kerropas miten tuo tapahtuu? Eli siis että jossain keskellä sivulla checkbox on valittuna eli aktivoituna (ei siis välttämättä ruksittuna) ja sen saa ruksittua tai ruksin poistettua painamalla välilyöntinäppäintä?

Sitten kun saat tämän tehtyä (joka siis kertomasi mukaan onnistuu) niin teet vaan saman textboxille.

Lebe80 [06.08.2009 09:50:44]

#

punppis: aktivointi on eri asia kuin se, että jollain elementillä on valmiiksi jokin arvo. Tekstikenttiinkin siis saa valmiiksi tekstiä, jos verrataan "ruksaamiseen".

Merri [06.08.2009 10:54:44]

#

Lomakekenttiin saa muuten tabindex-arvon. En ole koskaan tullut kokeilleeksi aiheuttaako tämä sen, että sarkainta painamalla se kenttä jolla on tabindex="1" tulisi aktiiviseksi. Juuri nyt en ehdi kokeilla moista.

peg [10.08.2009 11:57:57]

#

Kyllä tämäkin toimii jos javascript on selaimessa sallittu

<body OnLoad="document.form.las.focus();">
	<form action="" method="POST" name="form">
	<input type='text' name='las' size='50'>
	<input type='submit' value=' Lähetä '> <input type='reset' value='Tyhjennä'>
	</form>

Merri [10.08.2009 19:23:38]

#

Tuo on käytännössä sama kuin window.onload, mutta kirjoitettuna HTML-attribuuttiin. HTML:n kautta lisättynä JavaScriptistä että HTML:stä tulee aika pian sekametelisoppaa, vaikka yksinkertaisiin temppuihin se soveltuukin.

Tämäkin toki onnistuu ja tarjoaa parhaimman toimivuuden ilman kirjaston lisäämistä...

<body>
    <form><p><input id="punppis" name="jei" type="text" /> <button type="submit">Menoksi</button></p></form>
</body>
<script type="text/javascript">document.getElementById('punppis').focus();</script>
</html>

... mutta ei täytä suosituksia siitä, että skriptielementtien tulisi olla määritettynä sivun headin lopussa (paremman sivun kokonaislatautuvuuden takia). Muistaakseni skriptielementin tulisi myös aina olla määriteltynä nimenomaan headissä, eli tämä tuottaa virheen validaattorissa.

peg [10.08.2009 20:39:30]

#

Toi ominaisuus saisi olla HTML:ssä tai CSS:ssä

Merri [10.08.2009 22:01:07]

#

Tässä joutessani sitten piti kokeilla jQueryllä tabindexin hyväksikäyttöä:

<!DOCTYPE html>
<html>
	<head>
		<title>Fookustesti</title>
		<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript"></script>
		<script type="text/javascript">$(function(){$("*[tabindex=1]").focus();});</script>
	</head>
	<body>
		<p><a href="">Estelinkki</a></p>
		<form><p><input type="text" tabindex="1" value="Fookus ensin?" /></p></form>
	</body>
</html>

Ilman JavaScriptiä ensimmäinen elementti joka saa fokuksen sivulta on tabindexin sisältävä elementti, skriptien kanssa ladataan Googlecodesta/välimuistista jQuery ja sitten laitetaan fookus ykköstabindexin sisältävään elementtiin.

Ehkei nyt sentään siisteimmän näköinen ratkaisu, mutta lienee toiminnallisesti järkevin yleispätevä ratkaisu ja vaatii vain pari riviä.

Parempi virheentarkistus:

$(function(){var f=$("*[tabindex=1]");if(f)f.focus();});

Kaikkea sitä tekee kun jollakulla kestää kauan omissa civivuoroissaan...

peg [10.08.2009 22:37:35]

#

Siis tabindexin saa myös näin:

<form>
<div><input tabindex="4" size="30" name="vimppa" value="Tabulointijärjestyksessä 4." /><br />
<input tabindex="2" size="30" name="toka" value="Tabulointijärjestyksessä 2." /><br />
<input tabindex="1" size="30" name="eka" value="Tabulointijärjestyksessä 1." /><br />
<input tabindex="3" size="30" name="kolmas" value="Tabulointijärjestyksessä 3." />
</div></form>

tsuriga [11.08.2009 00:36:33]

#

...Kuten aiemmassa viestissä jo demonstroitiin. JavaScripti tuo tuohon siis sen lisäarvon, että kohdistus siirtyy elementtiin suoraan sivulatauksessa, ilman JS:ää surffailija joutuu tabittamaan formiin saakka (jossa sitten kohdistetaan elementtiin, jolla on tabindex 1).


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta