Jag har en funktion som kopierar ett ifyllt värde till andra delar av mitt formulär. Dock så exikverar inte scriptet som jag förväntar mig.
function setShipment(box){
// Kolla om boxen är ifylld
if(box.checked){
boxId = box.id;
selId = 'sel' + boxId.substring(3);
selectedIndex = document.getElementById(selId).selectedIndex;
// Gå igenom alla checkboxar och se om dom skall kryssas i
boxes = document.getElementsByTagName("input");
for(i=0;i<boxes.length;i++){
boxObj = boxes[i];
boxObjId = boxObj.id;
// Ska vi fylla i denna box?
if(boxObjId.indexOf(boxId+'Batch') > -1){
// Fyll i box
boxObj.checked = true;
// Sätter index på motsvarande SELECT
selId = 'sel' + boxObjId.substring(3);
selObj = document.getElementById(selId);
selObj.selectedIndex = selectedIndex;
// Kör setBatch
setBatch(boxObj);
}
}
}
}
function setBatch(box){
// Kolla om boxen är ifylld
if(box.checked){
boxId = box.id;
selId = 'sel' + boxId.substring(3);
index = document.getElementById(selId).selectedIndex;
sels = document.getElementsByTagName("select");
// Kolla om vi ska ändra index på denna SELECT
for(j=0;j<sels.length;j++){
obj = sels[j];
objId = obj.id;
// Skall vi ändra index?
if(objId.indexOf(selId + 'Serial') > -1){
obj.selectedIndex = index;
}
}
}
}
Först anropas setShippment och därifrån skall det ske minst 2 anrop till setBatch i if-satsen. Dock sker det bara ett och sen så avslutas funktionen. Detta är väldigt konstigt. Jag har skrivit ut vad i är när jag går ur funktionen och det är i mitt fall 5 vilket är rätt. Dock går man in i if-satsen när i är 3 och sen ska man göra det när i == 4 också men det verkar som om den inte "hänger med" pga sitt anrop till setBatch. När jag struntar i anropet till setBatch så funkar setShipment som den skall. Fattar inget och har felsökt som en idiot utan något resultat.
Är det något man måste veta när man gör anrop till andra funktioner inom en funktion i JavaScript?
Jag har gjort vad jag tycker är en workaround som funkar.
function setShipment(box){
// Check if box is checked
if(box.checked){
// En liten array för att lagra objekt
boxArr = new Array();
boxId = box.id;
selId = 'sel' + boxId.substring(3);
selectedIndex = document.getElementById(selId).selectedIndex;
// Lookup boxes to check
boxes = document.getElementsByTagName("input");
for(i=0;i<boxes.length;i++){
boxObj = boxes[i];
boxObjId = boxObj.id;
// Should we check this box?
if(boxObjId.indexOf(boxId+'Batch') > -1){
// Check box
boxObj.checked = true;
// Set corresponding SELECT
selId = 'sel' + boxObjId.substring(3);
selObj = document.getElementById(selId);
selObj.selectedIndex = selectedIndex;
// Call setBatch
// Fyll på arrayen med de objekt som skall skickas till setBatch
boxArr.push(boxObj);
}
}
// Gör samtliga anrop till setBatch
for(h=0;h<boxArr.length;h++)
setBatch(boxArr[h]);
}
}
Nu funkar det som sagt men jag kan verkligen inte se varför detta skulle funka och inte det andra.
Är det samma objekt som man använder i dom två anropen?
Skickas objektet per referens eller som en kopia till setBatch i första exemplet?
Isf kan man ju tänka sig att det blir något fel om man pekar om referensen. Mycket mystiskt tycker jag ändå.