Autor Zpráva
Pavel Jk.
Profil *
Dobrý večer,
vím, nekonečné téma, ale nic kloudného jsem nenašel. Používám tento script:
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="select-depend.js" type="text/javascript"></script>
</head>


<body onload="Sel.initAll()">
 <?php
 include "prihlaseni_k_db.php";
 $vysl=mysql_query("select s.nazev, s.id as id_sekce, p.podsekce from sekce s left join podsekce p on s.nazev=p.sekce order by s.nazev");
 
 ?>   
    
<form method="post">
    
    <?php
        echo "<select name=\"dva_selecty\">";
     $pamet="";
      while($zaznam = mysql_fetch_array($vysl)){
        if ($zaznam["nazev"]!= $pamet) 
         {
          $pamet = $zaznam["nazev"];
          echo "<optgroup label=\"".$zaznam["nazev"]."\">";
         }
           echo "<option value=\"".$zaznam["podsekce"]."\">".$zaznam["podsekce"]."</option>";
         }
         echo "</optgroup>";
   echo "</select>";
   ?>
   <input type="submit"> 
</form>
    </body>

javascript, který to zpracovává je zde:
function Sel(origSelect, groups, place) {
    this.origSelect = origSelect;
    this.groups = groups;
    this.place = place;
    this.newSelect = document.createElement('select');
}
Sel.prototype.init = function() {
    var option, text, i;
    for (i = 0; i < this.groups.length; i++) {
        text = this.groups[i].name;
        option = document.createElement('option');
        option.appendChild(document.createTextNode(text));
        this.newSelect.appendChild(option);
    }
    if (this.place) {
        this.place.appendChild(this.newSelect)
    } else {
        this.origSelect.parentNode.insertBefore(this.newSelect, this.origSelect);
    }
    this.setChoise(this.groups[0]);
    this.newSelect.oSel = this;
    this.newSelect.onchange = function() {
        this.oSel.setChoise(this.oSel.groups[this.selectedIndex]);
    }
}
Sel.prototype.setChoise = function(group) {
    var options;
    this.clearOrigSelect();
    for (var i = 0; i < group.options.length; i++) {
        this.origSelect.appendChild(group.options[i]);
    }
}
Sel.prototype.clearOrigSelect = function() {
    while (this.origSelect.hasChildNodes()) {
        this.origSelect.removeChild(this.origSelect.firstChild);
    }
}

Sel.initAll = function() {
    var selectsNodeList,  selectsArray = [], select, groups;
    selectsNodeList = document.getElementsByTagName('select');
    for (var i = 0; i < selectsNodeList.length; i++) {
        selectsArray[i] = selectsNodeList[i];
    }
    for (var i = 0; i < selectsArray.length; i++) {
        select = selectsArray[i];
        groups = select.getElementsByTagName('optgroup');
        if (groups.length > 0) {
            Sel.initSelect(select, groups);
        }
    }
}

Sel.initSelect = function(select, groups) {
    var arrGroups = [], group, goptions, i, j = [];
    for (i = 0; i < groups.length; i++) {
        group = groups[i];
        arrGroups[i] = {name: group.getAttribute('label'), options: []}
        goptions = group.getElementsByTagName('option');
        if (goptions.length < 1) {
            return;
        }
        for (j = 0; j < goptions.length; j++) {
            arrGroups[i].options[j] = goptions[j];
        }
    }
    var sel = new Sel(select, arrGroups);
    sel.init();
}

Vše jsem dotáhl do takového stádia, že to to funguje skvěle. Problém nastává když chci výsledné hodnoty obou selectů uložit do DB. Podsekci uložím v pohodě, horší je to ze sekcí, nevím jak získat údaj z toho prvního selectu. V té HTML části je jen jeden. Může mi prosím někdo poradit, případně popostrčit jak na to?
Pavel Jk.
Profil *
Když nikdo neví, mohli byste mi alespoň poradit nějaký spolehlivý způsob, který bude fungovat? Nejlíp javascript. V ajaxu se neorientuju.
Potřebuji propojit dva selecty, do kterých načítám údaje z databáze a potom je do databáze ukládám.
_es
Profil
Pavel Jk.:
Když nikdo neví
On by aj možno niekto vedel, len si to dal v takej nejakej „nevábnej“ forme. Čo s tým má niekto, kto by ti chcel poradiť, robiť? Napríklad si mohol aspoň vyrobiť „živú“ ukážku. Asi ten druhý select pridávaš nejako nesprávne - ak by bol súčasťou formulára, aj mal nastavenú vlastnosť name, tak sa pri odoslaní formulára odošle aj jeho hodnota.
Pavel Jk.
Profil *
_es:
Prošel jsem snad celé forum, ale spolehlivý způsob jak to vyřešit jsem nenašel, takže s toho usuzuji, že to nikdo neví.
_es
Profil
Pavel Jk.:
S menením hodnôt elementu select nie je problém, napríklad ako tu. Ak chceš používať dva selecty, prečo ich nemáš dva hneď a len nemeníš ich prvky option?
Pavel Jk.
Profil *
_es:
Tak nějak jsem to zamýšlel, bohužel nevím jak ty prvky jednotlivých selectů měnit.
_es
Profil
Pavel Jk.:
nevím jak ty prvky jednotlivých selectů měnit.
Veď to máš v tom odkazovanom vlákne - meň ich kolekcie options developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0