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

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, on-line

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.
19.9.2007 10:07:34

Patrik Šíma:

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

<?php
   $pole
= $_POST['vicepolozek[]'];
?>
19.9.2007 10:48:44

ikona Jakub Vrána:

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.
19.9.2007 13:10:51

Patrik Šíma:

Ano, máte pravdu, omlouvám se za překlep.
19.9.2007 13:45:07

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")
}
19.9.2007 11:27:09

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.
20.9.2007 14:33:49

glabasnat:

Taky bych zde zminil ze IE nereaguje na onclick u options.
Musi se pouzit onchange u selectu.
13.11.2007 09:45:39
avatar © 2005-2024 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.