Avatar billede ofirpeter Nybegynder
07. juli 2006 - 08:28 Der er 9 kommentarer og
1 løsning

Værdi i hiddenfelt

Hej eksperter. Jeg har benyttet mig af rownvings Multiple select. Findes her: http://roenving.users.whitehat.dk/index.html?/WD4Selects-beta.html

Jeg har dog store problemer med at hente de valgte værdier ned i en php variabel.

Hvis jeg nu vælger f.eks.
Valg 1 -> 2Valg 1 -> 3Valg 1

Ville jeg gerne have 3 variabler med henholdsvis Valg 1,2Valg 1 og 3Valg 1.

Jeg er kommet så langt at værdierne skal ligges i et hiddenfelt, og har forsøgt med dette: (som dog ikke virker)

<select size="7" name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');document.getElementById('opt1').value=this.options[this.selectedIndex].value">
    <option value="" selected>Vis alle</option>
</select>

Nogen bud på hvordan det kan lade sig gøre?

Med venlig hilsen
Peter
Avatar billede mm12010 Nybegynder
07. juli 2006 - 08:36 #1
hvad er det ikke virker? kommer der ikke noget i dit hidden-field eller kan du ikke fange det i php?
Avatar billede ofirpeter Nybegynder
07. juli 2006 - 08:51 #2
Det var et væsentligt spørgsmål :) Jeg kan ikke fange det i php.
Avatar billede erikjacobsen Ekspert
07. juli 2006 - 08:55 #3
Og et link til din side?
Avatar billede mm12010 Nybegynder
07. juli 2006 - 09:11 #4
hmm... det må være noget i din php der er galt - jeg har lige lavet en lille test, godt i asp, og det spiller perfekt:

<%
Response.Write("sel3: "+Request.Form("sel3")+"<br>");
Response.Write("sel4: "+Request.Form("sel4")+"<br>");
Response.Write("sel5: "+Request.Form("sel5")+"<br>");
Response.Write("opt1: "+Request.Form("opt1")+"<br>");
%>
<form name="sels" action="php.asp" method="post">
  <select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');this.form.opt1.value=this.options[this.selectedIndex].value;">
    <option value="" selected>Vis alle</option>
  </select>
  <select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');this.form.opt1.value+=this.options[this.selectedIndex].value;">
    <option value="" selected>&lt;-- Vælg --</option>
  </select>
  <select name="sel5" id="sel5" onchange="createOpts(this,'sel3','sel4','sel5');this.form.opt1.value+=this.options[this.selectedIndex].value;">
    <option value="" selected
>&lt;-- Vælg --</option>
  </select>
  <input name="opt1" type="hidden" value="">
  <input name="" type="submit">
</form>
Avatar billede ofirpeter Nybegynder
07. juli 2006 - 09:16 #5
Sådan! Nu fungerer det perfekt. Ved ikke helt hvad der skete, men efter at have brugt dine form virker det. Du må gerne svare mm12010.

Til andre, så er dette det endelige resultat:

<script language="javascript" type="text/javascript">

var arr = [
    ["Valg 1",[
        ["2. valg 1 (1)",
            ["3. valg 1 (1-1)","3. valg 2 (1-1)","3. valg 3 (1-1)","3. valg 4 (1-1)"]],
        ["2. valg 2 (1)",
            ["3. valg 1 (1-2)","3. valg 2 (1-2)","3. valg 3 (1-2)"]],
        ["2. valg 3 (1)",
            ["3. valg 1 (1-3)","3. valg 2 (1-3)","3. valg 3 (1-3)","3. valg 4 (1-3)"]]]],
    ["Valg 2",[
        ["2. valg 1 (2)",
            ["3. valg 1 (2-1)","3. valg 2 (2-1)","3. valg 3 (2-1)","3. valg 4 (2-1)"]],
        ["2. valg 2 (2)",
            ["3. valg 1 (2-2)","3. valg 2 (2-2)"]],
        ["2. valg 3 (2)",
            ["3. valg 1 (2-3)","3. valg 2 (2-3)","3. valg 3 (2-3)","3. valg 4 (2-3)","3. valg 5 (2-3)","3. valg 6 (2-3)","3. valg 7 (2-3)","3. valg 8 (2-3)","3. valg 9 (2-3)","3. valg 10 (2-3)","3. valg 11 (2-3)","3. valg 12 (2-3)","3. valg 13 (2-3)","3. valg 14 (2-3)","3. valg 15 (2-3)","3. valg 16 (2-3)","3. valg 17 (2-3)","3. valg 18 (2-3)","3. valg 19 (2-3)","3. valg 20 (2-3)","3. valg 21 (2-3)"]],
        ["2. valg 4 (2)",
            ["3. valg 1 (2-4)","3. valg 2 (2-4)","3. valg 3 (2-4)","3. valg 4 (2-4)"]]]],
    ["Valg 3",[
        ["2. valg 1 (3)",
            ["3. valg 1 (3-1)","3. valg 2 (3-1)","3. valg 3 (3-1)"]],
        ["2. valg 2 (3)",
            ["3. valg 1 (3-2)","3. valg 2 (3-2)","3. valg 3 (3-2)"]],
        ["2. valg 3 (3)",
            ["3. valg 1 (3-3)","3. valg 2 (3-3)","3. valg 3 (3-3)"]],
        ["2. valg 4 (3)",
            ["3. valg 1 (3-4)","3. valg 2 (3-4)","3. valg 3 (3-4)"]],
        ["2. valg 5 (3)",
            ["3. valg 1 (3-5)","3. valg 2 (3-5)","3. valg 3 (3-5)"]]]]
];
//alert(arr1[1][1])
function initSels(){
    createOpts(document.getElementById('sel3'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}

function antal_tegn() {

antal_tegn_i_felt.innerHTML = document.test.annoncetekst.value.length + " / 1000";

}
var shown = false;
</script>
<body onload="initSels();">
    <div>
    <? echo $_REQUEST["sel3"]; ?>
    <? echo $_REQUEST["sel4"]; ?>
    <? echo $_REQUEST["sel5"]; ?>
    <form name="sels" action="index.php" method="post">
  <select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');this.form.opt1.value=this.options[this.selectedIndex].value;">
    <option value="" selected>Vis alle</option>
  </select>
  <select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');this.form.opt1.value+=this.options[this.selectedIndex].value;">
    <option value="" selected>&lt;-- Vælg --</option>
  </select>
  <select name="sel5" id="sel5" onchange="createOpts(this,'sel3','sel4','sel5');this.form.opt1.value+=this.options[this.selectedIndex].value;">
    <option value="" selected
>&lt;-- Vælg --</option>
  </select>
  <input name="opt1" type="hidden" value="">
  <input name="" type="submit">
</form>
</body>
Avatar billede ofirpeter Nybegynder
07. juli 2006 - 09:32 #6
mm12010: Hvis jeg må stille et spørgsmål til. Er det mig  muligt at give hver andet en value, som er forskellig fra navnet. Således at det ville fungere som:

<option value="ID">Valg1</option>

Så jeg kan hente id'et i stedet for navnet?

Du må meget gerne smide et svar.
Avatar billede mm12010 Nybegynder
07. juli 2006 - 09:59 #7
value-attributten er som sådan uafhængig af navnet på din select, så i den kan du skrive lige hvad du ønsker...
Avatar billede ofirpeter Nybegynder
07. juli 2006 - 10:17 #8
Ja, sikkert et dumt spørgsmål, men jeg kan ikke lige kringle den. Jeg skriver mit arr udfra en database, som indeholder med navne og id'er på mine valg. Navnene har vi styr på, hvor skal jeg sætte mit id hvis jeg vil have det med? Og hvordan henter jeg det?
Avatar billede mm12010 Nybegynder
07. juli 2006 - 11:47 #9
ahh.. der misforstod jeg vist lige, der er lidt en anden sag - du skal have tilføjet dine id'er i javascript-array'et og skrevet dem ind i dine option-values opt.value i createOpts-funktionen:

        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }

det hurtigst - ikke det flotteste - vil nok være at skrive dit navn og dit id ind på samme plads i arrayet adskilt af en separator og splitte værdierne inden de indsættes
Avatar billede ofirpeter Nybegynder
07. juli 2006 - 12:40 #10
God ide!
Da jeg kun skal bruge id'et på sidste, gjorde jeg som følger:
Udskrev en streng med ID:NAVN

--- Ændring i script ---
if(typeof ar[i] == 'object'){
    opt.value = ;
    opt.text = ar[i][0];
}else{
    opt.text = ar[i];
    MyArrayOfStrings=opt.text.split(":",2)
    opt.text = MyArrayOfStrings [1];
    opt.value = MyArrayOfStrings [0];
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester