Avatar billede bolmer Nybegynder
29. maj 2005 - 23:08 Der er 11 kommentarer og
1 løsning

Tilføje elementer til et array

Jeg prøver at tilføje et element til min liste men det kan ikke lade sig gøre. Er der nogen som har en ide om hvad jeg gør galt??



    var ty = [
        ["99",["100"]]
    ];
   
   
    zz = "ty";
    var ab = null;
   
    zz+="[3][8]";
   
    ab = eval(zz);
    document.write(ab.length);
Avatar billede olebole Juniormester
29. maj 2005 - 23:17 #1
<ole>

Det fatter jeg nada af. Der er ikke noget af den kode, der hænger sammen ... hvad er det, du gerne vil?


/mvh
</bole>
Avatar billede olebole Juniormester
29. maj 2005 - 23:18 #2
- ikke engang dit ty-array er validt, så det er lidt svært at gætte, hvad du prøver  :)
Avatar billede kargo1 Nybegynder
29. maj 2005 - 23:36 #3
Er det ikke noget i retning af det her, du mener?

    var ty = Array(99, 100);
    // .. kode, kode ..
    ty[ty.length] = 3;
    ty[ty.length] = 8;
    document.write(ty);
Avatar billede bolmer Nybegynder
29. maj 2005 - 23:49 #4
Jeg har taget udgangspunkt i et JavaScript der er blevet skrevet i et forgående indlæg. Her bruges txt="arr" til at refererer til arr. Senere tilføjes et element til arr ved at skrive:

txt+="["+(s[i].selectedIndex-1)+"][1]";

Det er denne metode jeg ikke helt forstår. txt er åbenbart en kopi af arr. Igennem txt kan man så tilføje elementer til arr ved at skrive ovenstående kode.



<script type="text/javascript">
var arr = [
    ["Valg 1",["2. valg 1 (1)","2. valg 2 (1)","2. valg 3 (1)"]],
    ["Valg 2",["2. valg 1 (2)","2. valg 2 (2)","2. valg 3 (2)","2. valg 4 (2)"]],
    ["Valg 3",["2. valg 1 (3)","2. valg 2 (3)","2. valg 3 (3)","2. valg 4 (3)","2. valg 5 (3)"]]
];
function initSels(){
    createOpts(document.getElementById('sel1'));
}

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 --";
        }
    }
}
</script>
</head>
Avatar billede olebole Juniormester
30. maj 2005 - 00:00 #5
Det var godt nok en besynderlig kode. Hvem har dog skrevet den ..... og hvorfor mon(?)  :)
Avatar billede bolmer Nybegynder
30. maj 2005 - 00:11 #6
Men det fungere fint med txt+="["+(s[i].selectedIndex-1)+"][1]"; Jeg har prøvet at lave document.write(ar.length); før og efter txt+="["+(s[i].selectedIndex-1)+"][1]"; bliver kørt og det resultere i to forskellige tal.
Avatar billede olebole Juniormester
30. maj 2005 - 01:30 #7
Johh ... at noget fungerer, gør det jo ikke nødvendigvis godt. Jeg har svært ved at se, hvad årsagen til den fremgangsmåde. 'createOpts.arguments' er også en forlængst deprecated syntaks.
Prøv i ord at forklare, hvad det er for en opgave, scriptet burde løse - det er vist lettere i det lange løb  :)
Avatar billede bolmer Nybegynder
30. maj 2005 - 01:37 #8
Jeg skal lave en JSP side som har 2 drop/down menuer. Når man vælger noget fra den første drop/down menu skal mulighederne i den anden drop/down menu tilpasses.

Det tætteste jeg er kommet på en løsning på dette er ovenstående eksempel.
Avatar billede olebole Juniormester
30. maj 2005 - 04:48 #9
Hvordan skal de hænge sammen?
Avatar billede kargo1 Nybegynder
30. maj 2005 - 10:17 #10
Nedenstående er noget kode, som gør noget lignende på en ret enkel måde. Det stammer fra en formular, hvor brugeren kan vælge nogle stikord til et søgeindeks. Brugeren kan dels indtaste et nyt stikord, dels vælge tidligere registrerede stikord fra en select box. Herefter tilføjes de valgte stikord i en anden select box og fjernes fra den første eller fra indtastningsfeltet.

Måske kan du bruge noget herfra.

function addOption (fromField, toBox) {
    // Add text from input field to select box
    if (!fromField.value) return false;
    toBox.options[toBox.options.length] = new Option (fromField.value.toLowerCase(), fromField.value.toLowerCase());
    fromField.value="";
    // Move the entry to a sorted position
    var k = toBox.options.length - 1;
    var tmpOption = new Array();
    while (k > 0) {
        if (toBox.options[k].text < toBox.options[k-1].text) {
            tmpOption[0]= toBox.options[k-1].value;
            tmpOption[1] = toBox.options[k-1].text;
            toBox.options[k-1].value = toBox.options[k].value;
            toBox.options[k-1].text = toBox.options[k].text;
            toBox.options[k].value = tmpOption[0];
            toBox.options[k].text = tmpOption[1];
        }
        else k = 0;
        k--;
    } // while
}

function moveSelectedOptions (fromBox, toBox) {
    // Move selected options from one select box to another
    var moves = 0;
    var sourceOptions = fromBox.options;
   
    var j = sourceOptions.length;
    for (var i = 0; i < j; i++) {
        if (sourceOptions[i].selected) {
            // Copy the entry
            toBox.options[toBox.options.length] = new Option (sourceOptions[i].text, sourceOptions[i].value);
            // Move the entry to a sorted position
            var k = toBox.options.length - 1;
            var tmpOption = new Array();
            while (k > 0) {
                if (toBox.options[k].text < toBox.options[k-1].text) {
                    tmpOption[0]= toBox.options[k-1].value;
                    tmpOption[1] = toBox.options[k-1].text;
                    toBox.options[k-1].value = toBox.options[k].value;
                    toBox.options[k-1].text = toBox.options[k].text;
                    toBox.options[k].value = tmpOption[0];
                    toBox.options[k].text = tmpOption[1];
                }
                else k = 0;
                k--;
            } // while
    moves++;
        } // if
    } // for
if (moves) {
        // Delete the items from the source select box
        var i = (j-1);
        while (i >= 0) {
            if (sourceOptions[i].selected) {
                sourceOptions[i] = null;
            }
            i--;
        }
}
else alert("Marker de linjer, der skal flyttes. \r\nTIP: Hold ctrl-tasten nede for at markere flere linjer ad gangen.");
} // moveSelectedOptions()
Avatar billede roenving Novice
02. juni 2005 - 23:24 #11
Tjah, i hvert fald er den kode, bolmer har lagt, min kode til afhængige selects (som jeg heller ikke synes er særlig optimal, men den har den fordel, at den er ligeglad med antallet af select-bokse, hvis man kan finde ud af at skrive javascript-databasen !-)

-- men til to afhængige kan man jo finde et sted i gærdet, hvor der er lavere over, så f.eks. i en udgave, hvor andre felter bliver vist og skjult:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>

<title>Tomt dokument</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta name="keywords" content="roenving,http://www.eksperten.dk/spm/615326">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
</style>
<script language="javascript" type="text/javascript">
var models = new Array();
models[models.length] = ["234","235","224","24","4","5"];
models[models.length] = ["245","247","C23","Q13","645"];
models[models.length] = ["323","626","929"];

function showModels(elm){
  elm.form.text.style.display = 'none';
  var sel = elm.form.select2;
  if(elm.selectedIndex==0){
    sel.style.display = 'none';
  }else{
    sel.length = 1;
    var arrNum = elm.selectedIndex-1;
    for(i=0;models[arrNum].length>i;i++){
      sel.options[sel.length] = new Option(models[arrNum][i]);
      sel.style.display = 'inline';
    }
  }
}
</script>
</head>
<body>
<form id="minForm" name="minForm">
Vælg mærke:<br>
<select name="minSelect" id="minSelect" onchange="showModels(this);">
    <option value="">-- Vælg her --<br>
    <option value="1">BMW<br>
    <option value="2">Volvo<br>
    <option value="3">Mazda<br>
</select>
<br>Vælg model:<br>
<select name="select2" id="select2" style="display:none;" onchange="this.form.text.style.display=this.selectedIndex>0?'inline':'none';">
    <option value="">-- Vælg her --<br>
</select>
<br>Supplerende tekst:
<input type="text" name="text" style="display:none;">
<br>
<input type="submit" value="send">
</form>

</body>

</html>
Avatar billede bolmer Nybegynder
07. juli 2005 - 11:38 #12
Jeg fandt et mere simpelt eksempel
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