<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/screen.xsl" media="screen"?>
<lecture>

<meta>
  <maintitle>HTML5</maintitle>
  <author>Jiří Novotný</author>
  <title>Formuláře</title>
  <date>2014-01-xx</date>
  <link><!--a href="http://vyuka.ookami.cz" rel="external">http://vyuka.ookami.cz</a--></link>
</meta>
<!--
  „“–
  ↵ aneb &#x21B5; aneb \r aneb CR aneb CarriageReturn
-->

<slide title="Element &lt;input&gt;">

    <p>
        Jak už víme, je element <elmnt>&lt;input&gt;</elmnt> největším balíčkem ovládacích prvků. Nyní se podíváme na jeho nejdůležitější atributy.
    </p>
    <p>
        Jelikož některé z nich fungují jen pro určité hodnoty <attr>type</attr> (= jen pro určité typy prvků), uvedeme si teď jen ty všeobecné a na specifické atributy se podíváme až u jednotlivých prvků:
    </p>
    <ul>
        <li>
            <attr>autocomplete</attr> – viz. slajd <a href="?slajd=10">„Element form“</a>.
        </li>
        <li>
            <attr>autofocus</attr> – boolean atribut. Je-li nastaven na <em>true</em>, bude prvek po načtení stránky aktivní. Logicky tedy tento atribut může mít nastaven na <em>true</em> jen jeden prvek na stránce.
        </li>
        <li>
            <attr>disabled</attr> – boolean atribut. Je-li nastaven na <em>true</em>, znepřístupní prvek.
        </li>
        <li>
            <attr>form</attr> – viz. slajd <a href="?slajd=10">„Struktura formulářů – @id, @form, @for“</a>.
        </li>
        <li>
            <attr>name</attr> – viz. slajd <a href="?slajd=10">„Struktura formulářů – @id vs @name“</a>.
        </li>
        <li>
            <attr>spellcheck</attr>
            <ul>
                <li>
                    <attrval>true</attrval> – vždy se bude ověřovat gramatická správnost elementu;
                </li>
                <li>
                    <attrval>default</attrval> – bude se ověřovat gramatická správnost elementu, pokud to má defaultně nastaveno;
                </li>
                <li>
                    <attrval>false</attrval> – nebude se ověřovat gramatická správnost elementu.
                </li>
            </ul>
        </li>
        <li>
            <attr>type</attr> – určuje typ prvku. Nebude-li zapsán u <elmnt>&lt;input&gt;</elmnt>, bude mít hodnotu <attrval>text</attrval>.
        </li>
        <li>
            <attr>value</attr> – hodnota prvku, která se odešle při odeslání formuláře.
        </li>
    </ul>

</slide>
<slide title="A) textové prvky..">

    <p>
        Jedná se o následující hodnoty atributu <attr>type</attr>:
    </p>
    <ul>
        <li>
            <attrval>text</attrval> – <a href="?slajd=15">obyčejný textový vstup</a>;
        </li>
        <li>
            <attrval>email</attrval> – <a href="?slajd=16">zadávání imejlové adresy</a>;
        </li>
        <li>
            <attrval>password</attrval> – <a href="?slajd=17">zadávání hesla</a>;
        </li>
        <li>
            <attrval>search</attrval> – <a href="?slajd=18">dedikované vyhledávací textové pole</a>;
        </li>
        <li>
            <attrval>tel</attrval> – <a href="?slajd=19">zadávání telefonního čísla</a>;
        </li>
        <li>
            <attrval>url</attrval> – <a href="?slajd=20">zadávání adresy URL</a>.
        </li>
    </ul>

</slide>
<slide title="&lt;input type='text'&gt;">

    <p>
        <attrval>text</attrval> – nejjednodušší prvek, prosté jednořádkové textové pole:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-text.html"/>
        <css src="_files/forms/input-text.css"/>
        <output src="_files/forms/input-text.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='email'&gt;">

    <p>
        <attrval>email</attrval> – kontroluje, zda je zadaný řetězec v „e-mailovém“ tvaru:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-email.html"/>
        <css src="_files/forms/input-email.css"/>
        <output src="_files/forms/input-email.src.html"/>
    </example>        

</slide>
<slide title="&lt;input type='password'&gt;">

    <p>
        <attrval>password</attrval> – zakrývá psaný text:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-password.html"/>
        <css src="_files/forms/input-password.css"/>
        <output src="_files/forms/input-password.src.html"/>
    </example>        

</slide>
<slide title="&lt;input type='search'&gt;">

    <p>
        <attrval>search</attrval> – v podstatě to samé jako <attrval>text</attrval>. Některé prohlížeče však pro tento prvek nabízejí rozšířené možnosti:
    </p>
    <ul>
        <li>
            ikonka lupy, která po kliknutí zobrazí rolovací menu s řetězci vyhledávanými v minulosti;
        </li>
        <li>
            na konci textového pole je křížek, který smaže zadávaný řetězec;
        </li>
        <li>
            …
        </li>
    </ul>
    <example layout="html5">
        <html src="_files/forms/input-search.html"/>
        <css src="_files/forms/input-search.css"/>
        <output src="_files/forms/input-search.src.html"/>
    </example>
    <p>
        Navíc máte možnost doplnit atribut <attr>autosave</attr> – hodnotou je název nějaké kategorie, pod kterou se budou ukládat vyhledávané řetězce, které se pak ukazují při psaní v rolovacím menu (které všichni určitě dobře známe :).
    </p>
    <note>
        Doporučuje se používat aktuální doménu jako kategorii (např. <attrval>google</attrval>).
    </note>

</slide>
<slide title="&lt;input type='tel'&gt;">

    <p>
        <attrval>tel</attrval> – textové pole pro zadání telefonního čísla:
    </p>
    <note>
        Jak se zdá, tak nekontroluje vstup a zatím se chová stejně jako <attrval>text</attrval>.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-tel.html"/>
        <css src="_files/forms/input-tel.css"/>
        <output src="_files/forms/input-tel.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='url'&gt;">

    <p>
        <attrval>url</attrval> – textové pole pro zadání adresy URL, s kontrolou vstupu:
    </p>
    <note>
        Je nutné psát adresu i s příslušným protokolem (http://, ftp://, ...).
    </note>
    <example layout="html5">
        <html src="_files/forms/input-url.html"/>
        <css src="_files/forms/input-url.css"/>
        <output src="_files/forms/input-url.src.html"/>
    </example>

</slide>
<slide title="..a jejich atributy">
  
    <p>
        Následující atributy elementu <elmnt>&lt;input&gt;</elmnt> jsou platné pro všechny výše uvedené textové prvky (tedy pro hodnoty atributu <attr>type</attr> <attrval>email</attrval>, <attrval>password</attrval>, <attrval>search</attrval>, <attrval>tel</attrval>, <attrval>text</attrval>, <attrval>url</attrval>):
    </p>
    <ul>
        <li>
            <attr>list</attr> – <a href="?slajd=10">provázání s <elmnt>&lt;datalist&gt;</elmnt></a>;
        </li>
        <li>
            <attr>maxlength</attr> – <a href="?slajd=11">omezení na délku vstupu</a>;
        </li>
        <li>
            <attr>pattern</attr> – <a href="?slajd=12">validace pomocí regexpů</a>;
        </li>
        <li>
            <attr>placeholder</attr> – <a href="?slajd=13">zástupný text</a>;
        </li>
        <li>
            <attr>readonly</attr> – <a href="?slajd=14">znepřístupnění prvku</a>;
        </li>
        <li>
            <attr>required</attr> – <a href="?slajd=15">povinné vyžádání prvku</a>;
        </li>
        <li>
            <attr>size</attr> – <a href="?slajd=16">zobrazená velikost prvku</a> (pouze přibližná).
        </li>
    </ul>

</slide>
<slide title="@list (&amp; &lt;datalist&gt;)">
  
    <p>
        <attr>list</attr> – hodnotou je <attr>id</attr> příslušného <elmnt>&lt;datalist&gt;</elmnt>, což je vlastně jednoduchá datová struktura, kde máme předdefinované nějaké řetězce. Ty se pak zobrazují v rolovacím menu při psaní v textovém poli prvku (podobně jako historie hledání u <em>search</em> prvku).
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-list.html"/>
        <css src="_files/forms/input-attr-list.css"/>
        <output src="_files/forms/input-attr-list.src.html"/>
    </example>

</slide>
<slide title="@maxlength">
  
    <p>
        <attr>maxlength</attr> – hodnotou je číslo, určující maximální počet znaků, které uživatel může zadat do textového pole prvku. Hodnota může být jiná než kterou má atribut <attr>size</attr>.
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-maxlength.html"/>
        <css src="_files/forms/input-attr-maxlength.css"/>
        <output src="_files/forms/input-attr-maxlength.src.html"/>
    </example>
    <note>
        Zde omezení na 5 znaků.
    </note>

</slide>
<slide title="@pattern">
  
    <p>
        <attr>pattern</attr> – hodnotou je regulérní výraz (regexp), vůči kterému se bude kontrolovat zadaný řetězec.
    </p>
    <note>
        Jelikož se zřejmě při prázdném textovém poli přeskakuje kontrola regulérního výrazu, je nutné použít atribut <attr>required</attr>.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-attr-pattern.html"/>
        <css src="_files/forms/input-attr-pattern.css"/>
        <output src="_files/forms/input-attr-pattern.src.html"/>
    </example>
    <note>
        V této ukázce ošetření vstupu jdou odeslat pouze třípísmenné řetězce.
    </note>
      
    <hr />
      
    <p>
        PS: Jelikož u <elmnt>&lt;input&gt;</elmnt> chybí atribut <attr>minlength</attr>, můžeme si pomoci regulérním výrazem ;)
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-pattern_minlength.html"/>
        <css src="_files/forms/input-attr-pattern_minlength.css"/>
        <output src="_files/forms/input-attr-pattern_minlength.src.html"/>
    </example>

</slide>
<slide title="@placeholder">
  
    <p>
        <attr>placeholder</attr> – hodnotou je řetězec, který se ukazuje v textovém poli prvku předtím, než uživatel začne psát:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-placeholder.html"/>
        <css src="_files/forms/input-attr-placeholder.css"/>
        <output src="_files/forms/input-attr-placeholder.src.html"/>
    </example>

</slide>
<slide title="@readonly">
  
    <p>
        <attr>readonly</attr> – boolean atribut. Je-li nastaven na <em>true</em>, uživatel nemůže měnit hodnotu atributu <attr>value</attr>, tzn. do textového pole prvku nejde psát:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-readonly.html"/>
        <css src="_files/forms/input-attr-readonly.css"/>
        <output src="_files/forms/input-attr-readonly.src.html"/>
    </example>

</slide>
<slide title="@required">
  
    <p>
        <attr>required</attr> – boolean atribut. Je-li nastaven na <em>true</em>, nemůže být odeslán formulář, pokud má prvek prázdné příslušné textové pole:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-required.html"/>
        <css src="_files/forms/input-attr-required.css"/>
        <output src="_files/forms/input-attr-required.src.html"/>
    </example>

</slide>
<slide title="@size">
  
    <p>
        <attr>size</attr> – hodnotou je číslo, určující viditelnou délku textového pole prvku:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-size.html"/>
        <css src="_files/forms/input-attr-size.css"/>
        <output src="_files/forms/input-attr-size.src.html"/>
    </example>
    <note>
        Zde je viditelná délka textového pole 5 znaků, ale ono je to ve skutečnosti víc :-D
    </note>

</slide>
<slide title="B) číselné a časové prvky..">
    
    <p>
        Jedná se o následující hodnoty atributu <attr>type</attr>:
    </p>
    <ul>
        <li>
            číselné:
            <ul>
                <li>
                    <attrval>number</attrval> – <a href="?slajd=18">vkládání čísel</a>;
                </li>
                <li>
                    <attrval>range</attrval> – <a href="?slajd=19">číselný rozsah</a>;
                </li>
            </ul>
        </li>
        <li>
            časové:
            <ul>
                <li>
                    <attrval>date</attrval> – <a href="?slajd=20">datum</a>;
                </li>
                <li>
                    <attrval>datetime</attrval> – <a href="?slajd=21">datum s časem</a>;
                </li>
                <li>
                    <attrval>datetime-local</attrval> – <a href="?slajd=22">lokální datum s časem</a>;
                </li>
                <li>
                    <attrval>month</attrval> – <a href="?slajd=23">měsíc (s rokem)</a>;
                </li>
                <li>
                    <attrval>time</attrval> – <a href="?slajd=24">vkládání času</a>;
                </li>
                <li>
                    <attrval>week</attrval> – <a href="?slajd=25">týden (a rok)</a>.
                </li>
            </ul>
        </li>
    </ul>

</slide>
<slide title="&lt;input type='number'&gt;">

    <p>
      <attrval>number</attrval> – v podporovaných prohlížečích jsou u tohoto pole malé šipky na zvětšování/zmenšování čísla a funguje zde ověření vstupu, tj. jestli uživatel zadal skutečně číslo:
    </p>
    <note>
        Nefunguje v Internet Exploreru a Firefoxu – interpretují <attrval>number</attrval> jako <attrval>text</attrval>.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-number.html"/>
        <css src="_files/forms/input-number.css"/>
        <output src="_files/forms/input-number.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='range'&gt;">

    <p>
      <attrval>range</attrval> – jednoduché číselné „šoupátko“:
    </p>
    <p>
      Výchozí hodnoty: <attr>min</attr>="<attrval>0</attrval>", 
      <attr>max</attr>="<attrval>100</attrval>", <attr>value</attr>="<attrval>min+(max-min)/2</attrval>", <attr>step</attr>="<attrval>1</attrval>".
    </p>
    <example layout="html5">
        <html src="_files/forms/input-range.html"/>
        <css src="_files/forms/input-range.css"/>
        <output src="_files/forms/input-range.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='date'&gt;">

    <p>
        <attrval>date</attrval> – prvek pro vkládání data, bez času:
    </p>
    <note>
        Nefunguje v IE a Firefoxu.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-date.html"/>
        <css src="_files/forms/input-date.css"/>
        <output src="_files/forms/input-date.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='datetime'&gt;">

    <p>
        <attrval>datetime</attrval> – prvek pro vkládání data a času včetně časového posunu:
    </p>
    <note>
        Nefunguje v IE, Firefoxu ani Chrome.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-datetime.html"/>
        <css src="_files/forms/input-datetime.css"/>
        <output src="_files/forms/input-datetime.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='datetime-local'&gt;">

    <p>
        <attrval>datetime-local</attrval> – prvek pro vkládání data a času bez časového posunu:
    </p>
    <note>
        Nefunguje v IE a Firefoxu.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-datetime-local.html"/>
        <css src="_files/forms/input-datetime-local.css"/>
        <output src="_files/forms/input-datetime-local.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='month'&gt;">

    <p>
        <attrval>month</attrval> – prvek pro vkládání měsíce a roku:
    </p>
    <note>
        Nefunguje v IE a Firefoxu.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-month.html"/>
        <css src="_files/forms/input-month.css"/>
        <output src="_files/forms/input-month.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='time'&gt;">

    <p>
        <attrval>time</attrval> – prvek pro vkládání času:
    </p>
    <note>
        Nefunguje v IE a Firefoxu.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-time.html"/>
        <css src="_files/forms/input-time.css"/>
        <output src="_files/forms/input-time.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='week'&gt;">

    <p>
        <attrval>week</attrval> – prvek pro vkládání čísla týdne a roku:
    </p>
    <note>
        Nefunguje v IE a Firefoxu.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-week.html"/>
        <css src="_files/forms/input-week.css"/>
        <output src="_files/forms/input-week.src.html"/>
    </example>

</slide>
<slide title="..a jejich atributy">
  
    <p>
        Následující atributy elementu <elmnt>&lt;input&gt;</elmnt> jsou platné pro všechny výše uvedené číselné a časové prvky (tedy pro hodnoty atributu <attr>type</attr> <attrval>number</attrval>, <attrval>range</attrval>, <attrval>date</attrval>, <attrval>datetime</attrval>, <attrval>datetime-local</attrval>, <attrval>month</attrval>, <attrval>time</attrval>, <attrval>week</attrval>):
    </p>
    <ul>
        <li>
            <attr>min</attr>, <attr>max</attr> – <a href="?slajd=27">povolený rozsah hodnot</a>;
        </li>
        <li>
            <attr>required</attr> – <a href="?slajd=28">povinné vyžádání prvku</a>;
        </li>
        <li>
            <attr>step</attr> – <a href="?slajd=29">krok změny hodnoty</a>.
        </li>
    </ul>

</slide>
<slide title="@min a @max">

    <p>
        <attr>min</attr>, <attr>max</attr> – minimální a maximální hodnota, kterou může prvek nabývat. Tvary hodnot se liší u jednotlivých prvků:
    </p>
    <ul>
        <li>
            <attrval>number</attrval>, <attrval>range</attrval> – číslo;
        </li>
        <li>
            <attrval>date</attrval> – datum ve tvaru rok-měsíc-den, např. 1996-12-19;
            </li>
        <li>
            <attrval>datetime</attrval> – datum-čas-časový_posun ve tvaru rok-měsíc-denTčas±časový_posun<br/>
            např. 2002-10-02T15:00:00-08:00 (časový posun -8 hodin), 
            2002-10-02T15:00:00Z („Z“ na konci = bez časového posunu);
        </li>
        <li>
            <attrval>datetime-local</attrval> – datum-čas ve tvaru rok-měsíc-denTčas, např. 2010-01-02T15:49:02;
            </li>
        <li>
            <attrval>month</attrval> – tvar rok-měsíc, např. 2005-07;
            </li>
        <li>
            <attrval>time</attrval> – čas ve tvaru hodiny-minuty-sekundy, např. 12:51:03;
        </li>
        <li>
            <attrval>week</attrval> – tvar rok-Wčíslo_týdne, např. 2005-W17.
        </li>
    </ul>
    <example layout="html5">
        <html src="_files/forms/input-attr-min_max.html"/>
        <css src="_files/forms/input-attr-min_max.css"/>
        <output src="_files/forms/input-attr-min_max.src.html"/>
    </example>

</slide>
<slide title="@required">

    <p>
        <attr>required</attr> – pravdivostní atribut (ne)vyžadující vyplnění uvedeného formulářového prvku. Jelikož jsou číselná a datová pole v principu vlastně textová, chová se úplně stejně jako u <a href="?slajd=15">textových prvků</a>.
    </p>

</slide>
<slide title="@step">

    <p>
        <attr>step</attr> – určuje, po jakých „kouscích“ se má zvětšovat/zmenšovat číslo:
    </p>
    <note>
        U časových prvků zřejmě nemá význam.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-attr-step.html"/>
        <css src="_files/forms/input-attr-step.css"/>
        <output src="_files/forms/input-attr-step.src.html"/>
    </example>

</slide>
<slide title="C) tlačítka..">

    <p>
      Jedná se o následující hodnoty atributu <attr>type</attr>:
    </p>
    <ul>
        <li>
            <attrval>button</attrval> – <a href="?slajd=31">obecné tlačítko bez předem přiřazené funkce</a> (bez JavaScriptu v podstatě jen dyzajnový prvek);
        </li>
        <li>
            <attrval>reset</attrval> – <a href="?slajd=32">„vyčištění“ formuláře</a>;
        </li>
        <li>
            <attrval>submit</attrval> – <a href="?slajd=33">odeslání formuláře</a>.
        </li>
    </ul>

</slide>
<slide title="&lt;input type='button'&gt;">

    <p>
        <attrval>button</attrval> – prosté tlačítko, které nemá žádnou výchozí funkci (je tedy nutné mu vymyslet nějakou činnost třeba pomocí Javascriptu :-):
    </p>
    <example layout="html5">
        <html src="_files/forms/input-button.html"/>
        <css src="_files/forms/input-button.css"/>
        <output src="_files/forms/input-button.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='reset'&gt;">

    <p>
        <attrval>reset</attrval> – obnoví formulář do původní podoby:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-reset.html"/>
        <css src="_files/forms/input-reset.css"/>
        <output src="_files/forms/input-reset.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='submit'&gt; (a 'image')">

    <p class="enumerate">
        <attrval>submit</attrval> – odešle formulář:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-submit.html"/>
        <css src="_files/forms/input-submit.css"/>
        <output src="_files/forms/input-submit.src.html"/>
    </example>
    <note>
        Zde na adresu neexistujícího PHP skriptu.
    </note>
    <p>
        „Submitovací“ tlačítko vzhledem ke své funkci může obsahovat řadu dalších atributů. Konkrétně jde o atributy <attr>formaction</attr>, <attr>formenctype</attr>, <attr>formmethod</attr>, <attr>formnovalidate</attr>, <attr>formtarget</attr>, které při svém použití přepíší atributy <attr>action</attr>, <attr>enctype</attr>, <attr>method</attr>, <attr>novalidate</attr>, <attr>target</attr> u elementu <elmnt>&lt;form&gt;</elmnt> (viz. slajd <a href="forms.xml?slajd=10">„Element &lt;form&gt;“</a>).
    </p>

    <p class="enumerate">
        Hodně neobvyklý typ <attrval>image</attrval> vyrobí grafický (obrázkový) <em>submit button</em>. Má <strong>povinný atribut</strong> <attr>src</attr>, jehož hodnotou je cesta k obrázku:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-image.html"/>
        <css src="_files/forms/input-image.css"/>
        <output src="_files/forms/input-image.src.html"/>
    </example>
    <p>
        Mezi jeho další atributy patří:
    </p>
    <ul>
        <li>
            <attr>alt</attr> – hodnotou je textový řetězec, který se zobrazí místo obrázku, pokud se obrázek nenačte;
        </li>
        <li>
            <attr>height</attr>, <attr>width</attr> – hodnotou je nezáporné číslo, určující výšku nebo šířku obrázku (v CSS pixelech);
        </li>
        <li>
            a nepřekvapivě též <attr>formaction</attr>, <attr>formenctype</attr>, <attr>formmethod</attr>, <attr>formnovalidate</attr>, <attr>formtarget</attr> se stejnou funkcí jako výše.
        </li>
    </ul>

</slide>
<slide title="D) zaškrtávací prvky..">
    
    <p>
        Jedná se o následující hodnoty atributu <attr>type</attr>:
    </p>
    <ul>
        <li>
            <attrval>checkbox</attrval> – <a href="?slajd=35">výběr (více) možností</a>;
        </li>
        <li>
            <attrval>radio</attrval> – <a href="?slajd=36">přepínač možností</a>.
        </li>
    </ul>
    <note>
        V případě klasického formuláře je samozřejmě nezbytné mít u těchto prvků vyplněný atribut <attr>value</attr>!
    </note>

</slide>
<slide title="&lt;input type='checkbox'&gt;">

    <p>
        <attrval>checkbox</attrval> – zaškrtávací políčko:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-checkbox.html"/>
        <css src="_files/forms/input-checkbox.css"/>
        <output src="_files/forms/input-checkbox.src.html"/>
    </example>

</slide>
<slide title="&lt;input type='radio'&gt;">

    <p>
        <attrval>radio</attrval> – přepínač možností. Jelikož z určité množiny možností může být zaškrtlá jen jedna, <strong>je nezbytné, aby <em>radio buttony</em> patřící do stejné množiny možností měly stejnou hodnotu atributu</strong> <attr>name</attr>!
    </p>
    <example layout="html5">
        <html src="_files/forms/input-radio.html"/>
        <css src="_files/forms/input-radio.css"/>
        <output src="_files/forms/input-radio.src.html"/>
    </example>

</slide>
<slide title="..a jejich atributy">
    
    <p>
        Atributy <elmnt>&lt;input&gt;</elmnt> platné pro <attrval>checkbox</attrval> a <attrval>radio</attrval>:
    </p>
    <ul>
        <li>
            <attr>checked</attr> – <a href="?slajd=38">předvybrání prvku</a>;
        </li>
        <li>
            <attr>required</attr> – <a href="?slajd=39">vyžadování prvku</a>.
        </li>
    </ul>

</slide>
<slide title="@checked">

    <p>
        <attr>checked</attr> – boolean atribut. Je-li nastaven na <em>true</em>, bude tento prvek automaticky zaškrtlý po načtení stránky:
    </p>
    <note>
        V případě <em>radio buttonů</em> může mít tento atribut nastaven na <em>true</em> logicky jen jeden <em>radio button</em> z jedné množiny možností (= ze skupiny <em>radio buttonů</em> se stejnou hodnotou atributu <attr>name</attr>). V opačném případě „poslední vyhrává“ ;)
    </note>
    <example layout="html5">
        <html src="_files/forms/input-attr-checked.html"/>
        <css src="_files/forms/input-attr-checked.css"/>
        <output src="_files/forms/input-attr-checked.src.html"/>
    </example>

</slide>
<slide title="@required">

    <p>
        <attr>required</attr> – boolean atribut. Je-li nastaven na <em>true</em>, mají <attrval>checkbox</attrval> a <attrval>radio</attrval> odlišné vlastnosti:
        <ul>
            <li>
                <attrval>checkbox</attrval> – musí být zaškrtnut;
                <note>
                    Určitě jste někdy zaškrtávali, že souhlasíte se smlouvou, jinak by Vás to nepustilo dál ;)
                </note>
            </li>
            <li>
                <attrval>radio</attrval> – musí být zaškrtnut alespoň jeden <em>radio button</em> z jedné množiny možností.
                <note>
                    Tudíž stačí tento atribut navěsit na jeden z <em>radio buttonů</em> ze stejné množiny možností.
                </note>
            </li>
        </ul>
    </p>
    <example layout="html5">
        <html src="_files/forms/input-attr-required_checkbox_radio.html"/>
        <css src="_files/forms/input-attr-required_checkbox_radio.css"/>
        <output src="_files/forms/input-attr-required_checkbox_radio.src.html"/>
    </example>

</slide>
<slide title="E) &lt;input type='color'&gt;">

    <p>
        <attrval>color</attrval> – slouží k výběru barvy:
    </p>
    <note>
        Nefunguje v IE a Firefoxu.
    </note>
    <example layout="html5">
        <html src="_files/forms/input-color.html"/>
        <css src="_files/forms/input-color.css"/>
        <output src="_files/forms/input-color.src.html"/>
    </example>
    <p>
        Atribut <attr>value</attr>, který reprezentuje vybranou barvu, slouží také k výběru výchozí barvy. Jeho hodnotou je barva zapsaná v hexadecimálním formátu, např. #ffffff.
    </p>
    <note>
        Názvy barev (red, green, ...) zde nefungují!
    </note>

</slide>
<slide title="F) &lt;input type='file'&gt;">

    <p>
        <attrval>file</attrval> – slouží k výběru a následnému nahrání souboru na server:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-file.html"/>
        <css src="_files/forms/input-file.css"/>
        <output src="_files/forms/input-file.src.html"/>
    </example>
    <p>
        Vzhledem ke své poměrně složité funkci akceptuje řadu dalších pomocných atributů:
    </p>
    <ul>
        <li>
            <attr>accept</attr> – hodnotou je seznam MIME typů, oddělených čárkou („,“). Jen tyto typy souborů bude moci uživatel zvolit (= jsou přijímány serverem). Příklady:
            <ul>
                <li>
                    <attrval>image/*</attrval> – všechny obrázkové soubory
                </li>
                <li>
                    <attrval>video/*</attrval> – všechny video soubory
                </li>
                <li>
                    <attrval>audio/*</attrval> – všechny audio soubory
                </li>
                <li>
                    <attrval>.exe,image/*</attrval> – všechny soubory s příponou „.exe“ a všechny obrázkové soubory
                    <note>Tohle nefunguje ve Firefoxu.</note>
                </li>
            </ul>
        </li>
        <li>
            <attr>multiple</attr> – boolean atribut. Je-li nastaven na <em>true</em>, může uživatel vybrat více souborů najednou.
        </li>
        <li>
            <attr>required</attr> – boolean atribut. Je-li nastaven na <em>true</em>, musí uživatel vybrat alespoň jeden soubor.
        </li>
    </ul>
    <example layout="html5">
        <html src="_files/forms/input-attr-accept_multiple.html"/>
        <css src="_files/forms/input-attr-accept_multiple.css"/>
        <output src="_files/forms/input-attr-accept_multiple.src.html"/>
    </example>

</slide>
<slide title="G) &lt;input type='hidden'&gt;">

    <p>
        Velmi důležitý a používaný typ atributu <attrval>hidden</attrval> označuje (textový) prvek, který se sice nezobrazuje, ale hodnota jeho atributu <attr>value</attr> je odeslána ke zpracování při odeslání formuláře:
    </p>
    <example layout="html5">
        <html src="_files/forms/input-hidden.html"/>
        <css src="_files/forms/input-hidden.css"/>
        <output src="_files/forms/input-hidden.src.html"/>
    </example>

</slide>

</lecture>
