Avatar billede powerade Nybegynder
12. november 2007 - 13:42 Der er 7 kommentarer og
2 løsninger

Reference til dynamisk oprettede felter - howto?

Dette spørgsmål er i forlængelse af dette: http://www.eksperten.dk/spm/805041 og består af to dele..

del 1)
eg benytter denne funktion til at oprette felter dynamisk:
function makeBox(){
obj=document.orderform.qmgrs;
bokse = document.getElementById("boksdiv");
  var elm;
  for(i=0;i<obj.options[obj.selectedIndex].value;i++){
      ls=document.createElement("br");
      elm=document.createElement("input");
      elm.setAttribute("name","navn"+i);
      elm.setAttribute("type","text");
      bokse.appendChild(elm);
      bokse.appendChild(ls);
  }
  return true;
}

Når jeg senere kører validering af mine felter i formularen, kan jeg ikke referere de dynamisk oprettede felter. Jeg ville tro jeg kunne nå værdierne i de felter med denne:
document.orderform.navn1.value
Men det får jeg intet ud af..
Hvad gør jeg forkert? Jeg skal garanteret "fange" de felter på en anden måde, men hvordan? :)

del 2)
Ovennævnte funktion kaldes ved at bruge en onchange event som her:
<select name=qmgrs onChange="makeBox()">
Der er altså mulighed for at vælge mellem x antal bokse der skal oprettes.
Mit problem er nu, at hver gang man vælger et nyt antal opretter den det antal. Således at vælger man 2 opretter den 2 bokse, vælger man derefter 3 opretter den 3 mere, altså 5 i alt.

Det jeg i virkeligheden ønsker (i forb. med ovennævnte scenarie)er at de 2 oprindelige bokse bliver fjernet og 3 nye oprettet, eller blot en enkelt tilføjet. Således at når man vælger 3, så er der 3 i alt, og når man vælger 5 så er der 5 i alt.

Håber nogen kan hjælpe.
Pft.
Avatar billede roenving Novice
12. november 2007 - 14:16 #1
1. Virker det, hvis du bruger id i stedet ?-)

2. Nemmest at overskue:

bokse = document.getElementById("boksdiv");
while(bokse.hasChildNodes())
  bokse.removeChild(bokse.firstChild));
Avatar billede powerade Nybegynder
12. november 2007 - 14:25 #2
1. Ja det gør s** så... ;) - one down...

2. når jeg prøver at indsætte det while statement ser den samlede funktion ud som herunder:
function makeBox(){
obj=document.orderform.qmgrs;
if(isNaN(parseInt(obj.options[obj.selectedIndex].value))) {
if(obj.options[obj.selectedIndex].value=='nochoice'){
alert("Please choose the number of qmgr's you want channels defined on!");
return false;
} return false; }
bokse = document.getElementById("boksdiv");
bokse.style.display='block';
bokse.style.visibility='visible';
boksedescr.style.display='block';
boksedescr.style.visibility='visible';
while(bokse.hasChildNodes())
  bokse.removeChild(bokse.firstChild));
  var elm;
  for(i=0;i<obj.options[obj.selectedIndex].value;i++){
      ls=document.createElement("br");
      elm=document.createElement("input");
      elm.setAttribute("id","navn"+i);
      elm.setAttribute("type","text");
      bokse.appendChild(elm);
      bokse.appendChild(ls);
  }
  return true;
}

Men det resulterer i at jeg får en "Object Expected" fejl i linie 189, som er mit kald til en anden JavaScript funktion. Men jeg synes ikke det ser ud som om der mangler nogen }{ eller () nogen steder..(?)
Avatar billede roenving Novice
12. november 2007 - 14:33 #3
Hvor er linje 189 ?-)

-- og hvad er objektet boksedescr ?o]
Avatar billede powerade Nybegynder
12. november 2007 - 14:50 #4
Det her er linie 189 - <select name="disp" onChange="selecttype();">

Den kalder en helt anden funktion som ser ud på denne måde:
function selecttype(){
type=document.orderform.disp;
qqc = document.getElementById("qmqsclu");
no = document.getElementById("numberqmgrs");
bokse = document.getElementById("boksdiv");
boksedescr = document.getElementById("boksdivdescr");
qqc.style.display='none';
qqc.style.visibility='hidden';
no.style.display='none';
no.style.visibility='hidden';
bokse.style.display='none';
bokse.style.visibility='hidden';
boksedescr.style.display='none';
boksedescr.style.visibility='hidden';

if(type.options[type.selectedIndex].value=='single'){
qqc.style.display='block';
qqc.style.visibility='visible';
return true;
  }

if(type.options[type.selectedIndex].value=='qsg'){
qqc.style.display='block';
qqc.style.visibility='visible';
return true;
  }

if(type.options[type.selectedIndex].value=='cluster'){
qqc.style.display='block';
qqc.style.visibility='visible';
return true;
  }

if(type.options[type.selectedIndex].value=='qmgrs'){
no.style.display='block';
no.style.visibility='visible';
return true;
  }
  return true;
}
Avatar billede powerade Nybegynder
12. november 2007 - 14:50 #5
Men jeg kan ikke tro det er deri fejlen ligger - hvis jeg klipper while"løkken" ud får jeg ikke Object fejlen..
Avatar billede powerade Nybegynder
12. november 2007 - 15:18 #6
Jeg skylder 24.000 kasser bajere... Der havde sneget sig en } for meget ind i min funktion.. Smidt et svar - du fortjener pointene... ;)
Avatar billede roenving Novice
13. november 2007 - 00:18 #7
Velbekomme '-)

-- men behold de fleste point selv !-)
Avatar billede powerade Nybegynder
13. november 2007 - 14:03 #8
Jeg tager lidt selv så...
Avatar billede roenving Novice
15. november 2007 - 01:17 #9
Tak for point ;~}
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