Avatar billede kkd Nybegynder
03. maj 2005 - 16:25 Der er 4 kommentarer og
1 løsning

Få et javascript til at udfylde et hidden field.

Hej...
Jeg har nedenstående formular/javascript som jeg har hentet på http://willmaster.com/possibilities/demo/AutoDropdownChange/ Det skal bruges til at brugere først skal vælge en hovedkategori, og derefter en underkategori, der afhænger af valget af hovedkategori.
Det jeg gerne vil have den til, er at sende array-nummeret (eller et andet nummer, der indikerer hvilket underkategorinummer der er valgt) til formularfeltet "SecValue".

Kan det lade sig gøre?

<html>
<head>
</head>
<body>
<form action="tjek.asp" method="post" name="frm">
    <p>
  <select name="primary" class="foldeud" onChange="java script:MakeSecondary()">
      <option value="" selected>-- hovedkategori --</option>
      <option value="opt1">Kategori 1</option>
      <option value="opt2">Kategori 2</option>
      <option value="opt3">Kategori 3</option>
      <option value="opt4">Kategori 4</option>
    </select>
&nbsp; 
      <select name="secondary" class="foldeud">
          <option value ="'document.frm.secondary.options[i].value'"></option>
      </select>

      <input type="hidden" name="SecValue">
</p>
</form>
<script type="text/javascript" language="JavaScript">
<!-- Copyright 2004 Bontrager Connection, LLC
// For additional information about this JavaScript
//    and how to use it, see the "Changing Dropdown
//    Content On-the-Fly (Without Reloading Web Page)"
//    article, linked from the archives at
//    from http://willmaster.com/possibilities/archives/
// The above note and the copyright line must remain with
//    this JavaScript source code. Comments below this
//    point in the code may be removed if desired.

var FormName = "frm";
var initSubLine = "  -- vælg først en hovedkategori --  ";

var opt1Array = new Array();
opt1Array[0] = "-- vælg underkategori --";
opt1Array[1] = "Underkategori 1-1";
opt1Array[2] = "Underkategori 1-2";
opt1Array[3] = "Underkategori 1-3";
opt1Array[4] = "Underkategori 1-4";

var opt2Array = new Array();
opt2Array[0] = "-- vælg underkategori --";
opt2Array[1] = "Underkategori 2-1";
opt2Array[2] = "Underkategori 2-2";
opt2Array[3] = "Underkategori 2-3";
opt2Array[4] = "Underkategori 2-4";

var opt3Array = new Array();
opt3Array[0] = "-- vælg underkategori --";
opt3Array[1] = "Underkategori 3-1";
opt3Array[2] = "Underkategori 3-2";
opt3Array[3] = "Underkategori 3-3";
opt3Array[4] = "Underkategori 3-4";

var opt4Array = new Array();
opt4Array[0] = "-- vælg underkategori --";
opt4Array[1] = "Underkategori 4-1";
opt4Array[2] = "Underkategori 4-2";
opt4Array[3] = "Underkategori 4-3";
opt4Array[4] = "Underkategori 4-4";

///////////////////////////////////////////////////////////////
//                                                          //
// No customizations are normally required below this point. //
//                                                          //
///////////////////////////////////////////////////////////////

function Initialize() {
eval('document.' + FormName + '.secondary.options.length = 0');
eval('document.' + FormName + '.secondary.options[0] = new Option(initSubLine,"")');
} // function Initialize()

function MakeSecondary() {
var v = new String();
var plen = 0;
eval('plen = document.' + FormName + '.primary.length');
for(var i = 0; i < plen; i++) {
    var theone = false;
    eval('theone = document.' + FormName + '.primary.options[i].selected');
    if(theone == true) {
        eval('v = document.' + FormName + '.primary.options[i].value');
        i = plen;
        }
    }
// The following method of removing non-alphanumerics is used
//    instead of regular expressions, to accomodate IE/Mac.
var vlen = v.length;
var ts = new String();
for(var vi = 0; vi < vlen; vi++) {
    var vs = v.substr(vi,1);
    if((vs >= 'A' && vs <= 'Z') || (vs >= 'a' && vs <= 'z') || (vs >= '0' && vs <= '9')) {
        ts += vs;
        }
}
v = ts;
var Splitter = "|";
if(v.length < 1) { Initialize(); return; }
var arrayLength = eval(v + "Array.length");
eval('document.' + FormName + '.secondary.options.length = 0');
for(var i = 0; i < arrayLength; i++ ) {
    var iArray = new Array();
    eval("iArray = " + v + "Array[i].split(Splitter)");
    if(iArray.length < 2) { iArray[1] = ""; }
    eval('document.' + FormName + '.secondary.options[i] = new Option(iArray[0],iArray[1])');
    }
} // function MakeSecondary()

setTimeout("Initialize()",500);
//-->
</script>

<!-- end of JavaScript -->

</body>
</html>
Avatar billede flushout Nybegynder
03. maj 2005 - 19:56 #1
Jeg ved ikke om det er vigtigt eller ej, men først og fremmest ville jeg skrive value tagget ind i dit hidden field:

<input type="hidden" name="SecValue" value="">

Efter en hurtig gennemgang a scriptet ser det ud til at den valgte værdi i "hovedkategori" dropdown'en bliver gemt i variablen 'v'. Så for at skrive den valgte værdi til dit hidden field "SecValue" skal du erstatte en stump af din kode med den jeg har sat ind herunder:

for(var i = 0; i < arrayLength; i++ ) {
    var iArray = new Array();
    eval("iArray = " + v + "Array[i].split(Splitter)");
    if(iArray.length < 2) { iArray[1] = ""; }
    eval('document.' + FormName + '.secondary.options[i] = new Option(iArray[0],iArray[1])');
    }
    // ------------- HER ER MIN TILFØJELSE -----------
    document.'+FormName +'.SecValue.value = v;
} // function MakeSecondary()

Jeg håber det virker :)
Avatar billede kkd Nybegynder
04. maj 2005 - 17:24 #2
Det virker ikke :(

Hvis jeg tilføjer den linie, vil den slet ikke lave secondary dropdown'en.
Det er ikke hovedkategorien jeg vil have ned i "SecValue", den er i dropdown med navnet "primary". Det er derimod et tal, der repræsenterer hvilken underkategori der er valgt, altså Array-nummeret i det valgte opt1Array, opt2Array, opt3Array eller opt4Array
Avatar billede flushout Nybegynder
09. maj 2005 - 14:23 #3
Hvis du vil have værdien af den valgte secondary ind i dit hiddenfield "SecValue" skal du lave en funktion som aktiveres ved en onChange og skriver den valgte værdi til dit hiddenfield..

----
Her er lidt pseudo kode:
----

function getSecondary(){
    // Henter værdien fra din dropdown
    secValue = document.dinformular.dindropdown.selected.value;
    // Skriver værdien til dit hidden field
    document.dinformular.dithiddenfield.value = secValue;
}

for at kalde funktionen skal din "secondary" dropdown se sådan ud:

      <select name="secondary" class="foldeud" onChange="java script:getSecondary()">
          <option value ="'document.frm.secondary.options[i].value'"></option>
      </select>
Avatar billede kkd Nybegynder
11. juli 2005 - 22:50 #4
Undskyld at det har varet så længe.

Jeg fik en god ven til at lave en bedre løsning, uden javascript.
Avatar billede olebole Juniormester
12. juli 2005 - 03:31 #5
<ole>

- gad vide, hvordan man får gode venner, når man ikke engang kan finde ud af at sige et lillebitte 'tak', når vildt fremmede mennesker spilder tid med at forsøge at hjælpe én med et problem, man har bedt om hjælp til ...... der er så meget, kodeho'der ikke forstår  :)

/mvh
</bole>
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