Jag har problem med en Array, den vill inte dela värdena efter fnuttarna, utan håller ihop allting.
I en dd ska man välja ett tema med språk, som det finns tre av (dk/se/de). Om man väljer se och de, ska två av tre texter (txt_alttext) vid textrutan få texten Swedish resp German. Problemet är att den första får "Swedish", "German", dessutom med fnuttarna. Den andra blir "undefined".
Anledningen till att fnuttarna finns där är att Arrayer skapas med fnuttar mellan värdena, men här verkar den inte bry sig om detta.
Strängen "Swedish", "German" ska alltså bli en array, men det blir den inte.
(Om jag tar bort fnuttarna vid tilldelningen, blir det likadant, fast utan fnuttar.)
Varför???
for (i = 0; i < form.tema_id2_sprak_id2.length; i++){
if (form.tema_id2_sprak_id2.options[i].selected){
var tema_sprak_value = form.tema_id2_sprak_id2.options[i].value;
var sprak_id = tema_sprak_value.slice(tema_sprak_value.lastIndexOf("-")+1);
if ((!dk_valt) && (sprak_id == 2)){
valt++
dk_valt = true;
land += "\"Danish\", "
}
else if ((!se_valt) && (sprak_id == 5)){
valt++
se_valt = true;
land += "\"Swedish\", "
}
else if ((!de_valt) && (sprak_id == 8)){
valt++
de_valt = true;
land += "\"German\", "
}
}
}
arr_land = new Array(land.substring(0,land.lastIndexOf(",")))
//avmarkera valt antal alttext. valt-1 eftersom valt<=3, och [] är <=2
for (i = valt - 1; i > -1; i--){
form.alttext[i].disabled = false;
form.alttext[i].value = "";
document.all["txt_alttext"][i].innerHTML = arr_land[i];
}
Jag tror du har missuppfattat funktionen på slice. slice är en metod av array som returnerar en del av arrayen. Om du exempelvis har en array med namnet foo kan du plocka ut de 2 första värdena från arrayen med newArray=foo.slice(0,2); Om du har en textsträng som ser ut så här "dk,se,de" och vill göra en array av den använder du (string)-metoden split; minArray=textString.split(",");
Men om du förklarar vad du har (en dropdown-meny, en text-sträng eller vad det är) så kan vi nog lösa det enkelt.
där 2, 5 eller 8 är språket. Det fungerar, eftersom jag får värde i variabeln land.
Den som inte fungerar är att få land=("Danish", "Swedish") att bli en array, arr_land, då den "håller ihop" dem.
Min alternativa väg hade varit att läsa första värdet ur strängen, skriva ut/radera det, läsa nästa, men det verkar väldigt b-kodat, och krångligt, dessutom ska array ju fungera!
Anledningen till att det inte fungerar är att du inte deklarerat dina variabler till att vara av en viss typ, exempelvis String(). Det som händer nu är att det lagras ett initialt värde i dessa innan den första tilldelningen; och detta är undefined.
En annan sak du slarvat med är att deklarera variablerna explicit, d.v.s. med nyckelordet var:
var land = "";
Om du inte deklarerar dem explicit kommer JavaScript att deklarera dem implicit åt dig, vilket i praktiken innebär att de skapas som globala variabler, vilket i sin tur innebär ett mer minneskrävande program.
var valt = 0;
var dk_valt = false;
var se_valt = false;
var de_valt = false;
var land = "";
Dock ska villigt medges att det kanske ska stå vilken typ det ska vara, men det har jag nästan aldrig sett, antar du menar
var land = new String();
Anledningen att den andra variabeln blir undefined är att jag blandade ihop sakerna vilket Jojoxx har hjälpt till att reda ut. arr_land[1] fanns helt enkelt inte, eftersom det inte är (var) en array, som jag förstår det.