Další hrátky s formulářovým polem SELECT

1. června 2001

V předchozích článcích na toto téma jsme si ukázali několik způsobů, jak v HTML stránce využít rozbalovacího seznamu neboli pole SELECT. Dnes si ukážeme hrst jednoduchých skriptů, které se nám budou hodit v případě pole SELECT s atributem „multiple“, tedy seznamu, v němž můžeme vybrat najednou více položek než jednu.

Základní informací, která je užitečná zejména v případě delších seznamů, je vypsání počtu položek, které jsou v SELECT seznamu označeny. Následující formulář tuto informaci poskytuje – zkuste označit více druhů ovoce v příslušném seznamu (pro úplné začátečníky – více položek označíte – ve Windows – přidržením klávesy Ctrl při klikání myší):


Označeno:

Označit vše
Zušit označení
Invertovat označení
Výchozí označení

HTML kód předchozího formuláře (bez čtveřice odkazů) vypadá takto (všimněte si, že druhá a pátá položka jsou označeny již „z výroby“):

<form name="main">
    <p><select name="list" size="7" multiple onChange="SelectCount(this)">
        <option value="1">Meloun</option>
        <option value="2" selected>Třešeň</option>
        <option value="3">Malina</option>
        <option value="4">Salám</option>
        <option value="5" selected>Banán</option>
        <option value="6">Jahoda</option>
        <option value="7">Hruška</option>
        <option value="8">Jablko</option>
    </select><br>
    <br>
    Označeno:<input type="text" name="sc" size="3"></p>
</form>

Změnu hodnoty v poli „Označeno“ – formulářové pole s názvem sc – zajišťuje funkce SelectCount, volaná z handleru události onChange dotyčného seznamu, tedy při každé změně označení položek v seznamu. Kód této krátké JavaScriptové funkce vypadá následovně:

function SelectCount(thefield) {
    for( var i=0,count=0; i<thefield.length; i++ ) {
        count += ( thefield.options[i].selected ? 1 : 0 )
    }   
    thefield.form.sc.value = count;
}

K uvedené funkci není myslím potřeba žádné vysvětlení, zbývá dodat, že za definicí HTML formuláře je záhodno zavolat funkci SelectCount poprvé, to proto, aby se do pole „Označeno“ dostal počet položek, které jsou označeny již při otevření stránky (handler události onChange není při této příležitosti volán):

SelectCount(document.main.list)

Další obslužné funkce seznamu SELECT jsou volány ze čtyř odkazů, vypsaných pod polem „Označeno“ ve výše uvedeném formuláři, a slouží k obsluze označení jednotlivých položek seznamu. Pokud jste si je dosud nevyzkoušeli, učiňte tak nyní – význam jednotlivých odkazů je zřejmý z popisného textu.

První dva odkazy – „Označit vše“ a „Zrušit označení“ volají tutéž funkci, jen s různými parametry. Je-li hodnota parametru value v následující funkci rovna true, dochází k označení všech položek pole SELECT, v opačné případě ke zrušení jejich značení. Kód funkce, pojmenované SelectAll je opět velice jednoduchý:

function SelectAll(thefield,value) {
    for( var i=0; i<thefield.length; i++ ) {
        thefield.options[i].selected = value
    }   
    SelectCount(thefield)
}

Poznámka: U této, jakož i u dalších dvou uvedených funkcí, voláme na závěr funkci SelectCount – je to opět proto, abychom zajistili správné zobrazení počtu označených položek do pole „Označeno“ – v případě změny označení pomocí skriptu také není aktivován handler události onChange.

Ani na další funkci, mající za úkol obrátit (invertovat) označení v poli SELECT, není nic složitého (funkci lze rovněž, rozšířením parametru value, elegantně spojit s funkcí předchozí):

function SelectInvert(thefield) {
    for( var i=0; i<thefield.length; i++ ) {
        thefield.options[i].selected = !thefield.options[i].selected
    }   
    SelectCount(thefield)
}

A do třetice, totéž v bleděmodrém: funkce SelectDefault vrací označení tak, jak bylo v okamžiku natažení stránky. Využíváme zde užitečné vlastnosti defaultSelected objektu Option:

function SelectDefault(thefield) {
    for( var i=0; i<thefield.length; i++ ) {
        thefield.options[i].selected = thefield.options[i].defaultSelected
    }   
    SelectCount(thefield)
}

Na závěr zbývá jen uvést, jak jsou v uvedeném příkladu tyto funkce volány z HTML kódu odkazů (hyperlinků):

<a href="javascript:SelectAll(document.main.list,true)">Označit vše</a><br>
<a href="javascript:SelectAll(document.main.list,false)">Zušit označení</a><br>
<a href="javascript:SelectInvert(document.main.list)">Invertovat označení</a><br>
<a href="javascript:SelectDefault(document.main.list)">Výchozí označení</a>

To je pro tentokrát vše, přeji vám příjemný den.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Mohlo by vás také zajímat

Nejnovější

2 komentářů

  1. x

    Říj 1, 2009 v 11:57

    nefunguje v IE 8.0 ani Firefox 3 :) Funguje to vůbec někde ?

    Odpovědět
  2. Miroslav Kučera

    Říj 1, 2009 v 17:11

    x: uvedomujete si vubec, ze clanek vysel v roce 2001, a ze JavaScript a prohlizece od te doby usly znacny kus cesty? :-)

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *