webForumDet fria alternativet

Gör en array

13 svar · 302 visningar · startad av skyman

skymanMedlem sedan juli 20011 347 inlägg
#1

Jag hämtar options från mitt formulär.

Värderna är semikolonseparerade och jag hämta fler, ty det är en multiple...

Nu vill jag slå ihop alla värden i en array som jag ska skicka till en annan funktion...

<select name="Kom" multiple="multiple">
<option value="1_980386">Berg (1)</option>
<option value="1_980247,1_980464">Strömsund (2)</option>
<option value="1_980104,1_980510">Åre (2)</option>
<option value="1_980061,1_980174,1_1212937,1_1202022,1_980368,1_980590">Östersund (6)</option>
</select>

Hur skriver jag en function som lägger ihop de till en array.
Om jag väljer Berg och Strömsund vill jag ha en array som ser ut som: array(1_980386,1_980247,1_980464)...

skymanMedlem sedan juli 20011 347 inlägg
#2
function MarkSelected(opt){
   var src = document.form.elements["Kom"], save = [], temp = "";
   for(i=0; i<src.length; i++) {
      if(src[i].selected) {
         // Kör en explode på src
         temp = src[i].value.split(",");
         for(x=0; x<temp.length; x++){
            [b]save[]=temp[x];[/b]
            alert("1");
         }
      }
   }
   bla bla bla bla

Hur skriver man den feta raden, dvs tilldelningen till en array i javascript?

colioneMedlem sedan juni 20013 386 inlägg
#3

save[x]=temp[x]? eller vad vill du göra?

dectgapMedlem sedan sep. 20021 542 inlägg
#4

Det var inget...

skymanMedlem sedan juli 20011 347 inlägg
#5

Jag vill ha en array som ser ut såhär:
Array(
1_6546546,
1_418717,
1_1681678)

dectgapMedlem sedan sep. 20021 542 inlägg
#6
function MarkSelected(opt){
   var src = document.form.elements["Kom"], temp = "";
   var save = new Array();
   for(i=0; i<src.length; i++) {
      if(src[i].selected) {
         // Kör en explode på src
         temp = src[i].value.split(",");
         for(x=0; x<temp.length; x++){
            save[save.length]=temp[x];
            alert("1");
         }
      }
   }
   bla bla bla bla
colioneMedlem sedan juni 20013 386 inlägg
#7

dectgap skrev:

Börja med att deklarera arrayn först också:

Det har han gjort också: save=[]

skymanMedlem sedan juli 20011 347 inlägg
#8

Jag vill ha en endimensionell array, inte två...

save[] = temp[x] ger en endimensionell, men det blir fel...
save[x] = temp[x] fungerar, men jag vill inte ha en array som ser ut så.

dectgapMedlem sedan sep. 20021 542 inlägg
#9

Jag var (är) osäker på om det räcker att skriva save = [] för att göra save till en array, men hur som helst räcker det inte att skriva save[] = nånting för att lägga till något till arrayn. Dessutom funkar det inte heller att skriva save[x] = temp[x] eftersom om det finns flera alternativ valda i select-menyn skrivs de gamla värdena i save bara över.

skymanMedlem sedan juli 20011 347 inlägg
#10

dectgap skrev:

Dessutom funkar det inte heller att skriva save[x] = temp[x] eftersom om det finns flera alternativ valda i select-menyn skrivs de gamla värdena i save bara över.

Precis, hur gör man då? :)

dectgapMedlem sedan sep. 20021 542 inlägg
#11

Har du testat det jag skrev?

save[save.length]=temp[x];
JojoxxMedlem sedan juni 20004 306 inlägg
#12

dectgaps variant fungerar. Men sedan har du även javascripts funktion; concat som är till för att just lägga till ett värde eller en array till en array.

save=save.concat(temp[x]);

skymanMedlem sedan juli 20011 347 inlägg
#13

Hmmm...
Jag vill att den här koden ska generera samma typ av slutprodukt som onClick-eventet nedan.

function MarkSelected(opt){
   var src=document.form.elements["Kom"],temp = new Array(),save = new Array();
   for(i=0; i<src.length; i++) {
      if(src[i].selected) {
         temp = src[i].value.split(",");
         for(x=0; x<temp.length; x++){
            save=save.concat(temp[x]);
         }
      }
   }
   Select_s1(save);
};

function Select_s1() {
  anArray = new Array();
  for(i=0; i<arguments.length; i++){
    anArray[arguments[i]]=1;
    [b]alert(arguments[i]);[/b]
  }
...
<input type='button' value='Region 0 (10)' onClick="return Select_s1('1_980054','1_1210900','1_980350','1_1205661','1_980516','1_980567','1_1205735','1_1204046','1_1206422','1_1207763');">

Men, när jag klickar på knappen så visas en och en i en alert (se fet stil), men när jag "går via" MarkSelected() så skrivs id:na ut kommaseparerade...
Jag vill kunna använda Select_s1 till båda...

skymanMedlem sedan juli 20011 347 inlägg
#14

Om jag anropar funktionen och skickar med följande så fungerar det:

Select_s1('1_980138','1_980186','1_980324','1_980433');

Men hur ska jag göra för att få en liknande sträng/array eller vad det är jag skickar med detta:

   var src=document.form.elements["Kom"],temp = new Array(),save = new Array();
   for(i=0; i<src.length; i++) {
      if(src[i].selected) {
         temp = src[i].value.split(",");
         for(x=0; x<temp.length; x++){
            save=save.concat(temp[x]);
         }
      }
   }
Select_s1(save);

Selectboxen "Kom" kan se ut såhär med varierande antal kommaseparerade strängar:

<option value="1_980061,1_980174,1_1212937,1_1202022,1_980368,1_980590">Östersund (6)</option>
Genererad på 366 ms · cache AV · v20260730165559-full.f96bc7eb