Vybraná volba ve výběrovém seznamu

Školení, která pořádám

Pokud u voleb <option> používáme atribut value, dá se vybraná položka v JavaScriptu zjistit prostým select.value. Pokud ale atribut value nepoužíváme, tak vlastnost select.value nefunguje v Internet Exploreru a ke slovu přichází složitější konstrukce select.options[select.selectedIndex].text.

V PHP se s oběma případy zachází pochopitelně stejně, protože prohlížeč předá data v jednotném formátu.

Přijďte si o tomto tématu popovídat na školení JavaScript a AJAX.

Jakub Vrána, Výuka, 19.9.2007, diskuse: 7 (nové: 0)

Diskuse

Peter Kováč:

V súvislosti s tagom <select> by som sa chcel spýtať na jednu záludnosť - ako dokážem zachytiť hodnoty "multiple" selectu. Ja som sa vždy dopátral len k prvej vybranej odpovedi, bez ohľadu na to, koľko odpovedí za ňou bolo ešte vybraných.

Patrik Šíma:

asi takto:
<select name="vicepolozek[]" multiple="multiple">
<option value="1">a</option>
<option value="2">b</option>
</select>

<?php
   $pole
= $_POST['vicepolozek[]'];
?>

ikona Jakub Vrána OpenID:

Ve skutečnosti je to <?php $pole = $_POST['vicepolozek']; ?>. Pozor na případ, kdy uživatel nevybere nic, pak $_POST['vicepolozek'] není vůbec nastaveno (není to prázdné pole) a nejde tedy např. iterovat.

Patrik Šíma:

Ano, máte pravdu, omlouvám se za překlep.

ikona LLook:

V referenci javascriptu píšou tohle: For Select objects that can have multiple selections (that is, the SELECT tag has the MULTIPLE attribute), the selectedIndex property is not very useful. In this case, it returns the index of the first selection. To find all the selected options, you have to loop and test each option individually.
Což je teda pěkně blbý, ale asi to fakt jinak nejde:

for (var i = 0; i < mySelect.options.length; i++) {
   if (mySelect.options[i].selected)
      document.write(" mySelect.options[i].text\n")
}

sylpheed:

Jestliže selectedIndex vrací index *první* vybrané položky, nešel by ten cyklus trošku zefektivnit?

for (var i = mySelect.selectedIndex; i < mySelect.options.length; i++) {
...

U delšího seznamu, kde by nebylo vybraných prvních pár položek, by to třeba mělo smysl. Trochu.

glabasnat:

Taky bych zde zminil ze IE nereaguje na onclick u options.
Musi se pouzit onchange u selectu.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.