16. juli 2005 - 20:41
Der er
32 kommentarer og 1 løsning
Kan ikke indsætte i dropdown-box - why?
Hej alle Der udskrives "01020304050607080910111213141516171819202122232425262728293031" i stedet for en datoerne (dage) i en dropdown-box. Hvor er fejlen? <div ID="files"> </div> <Input Type="Button" Value="tilføj fil" OnClick="return(Expand());" Style="border=0;background=white;cursor:hand"></td></tr> <Script> var nfiles = 1; function Expand(){ nfiles++; files.insertAdjacentHTML('BeforeEnd','<select name="Date_Day" size="1" class="inputbox">'); for (i = 1; i <= 31; i++) { files.insertAdjacentHTML('BeforeEnd','<option>' + i + '</option>'); } files.insertAdjacentHTML('BeforeEnd','</select>'); return false; } </Script>
Annonceindlæg fra SuperOffice
Hvad er det du vil ?-) -- kan du ikke bare have den select altid der, og så vise/skjule den ?-)
Jeg skal såmen bare have mig en funktion, som kan lave en eller flere dropdown-boxe - alt efter hvor mange brugerne har brug for.
Hvis jeg ændrer koden til - så parenteserne laves firkante: <div ID="files"> </div> <Input Type="Button" Value="tilføj fil" OnClick="return(Expand());" Style="border=0;background=white;cursor:hand"></td></tr> <Script> var nfiles = 1; function Expand(){ nfiles++; files.insertAdjacentHTML('BeforeEnd','[select name="Date_Day" size="1" class="inputbox"]'); for (i = 1; i <= 31; i++) { files.insertAdjacentHTML('BeforeEnd','[option]' + i + '[/option]'); } files.insertAdjacentHTML('BeforeEnd','[/select]'); return false; } </Script> Udskriver den tagene, som de skal (så man kan se dem): [select name="Date_Day" size="1" class="inputbox"][option]1[/option][option]2[/option][option]3[/option][option]4[/option][option]5[/option][option]6[/option][option]7[/option][option]8[/option][option]9[/option][option]10[/option][option]11[/option][option]12[/option][option]13[/option][option]14[/option][option]15[/option][option]16[/option][option]17[/option][option]18[/option][option]19[/option][option]20[/option][option]21[/option][option]22[/option][option]23[/option][option]24[/option][option]25[/option][option]26[/option][option]27[/option][option]28[/option][option]29[/option][option]30[/option][option]31[/option][/select] Så hvad er fejlen mon?
Jeg ville absolut bruge dom til at indsætte: <div id="motherDiv"> </div> <button onclick="appendSelect()">Indsæt ny select</button> <script type="text/javascript"> function appendSelect(){ var mother = document.getElementById('motherDiv'); var newSel = document.createElement("SELECT"); mother.appendChild(newSel); for(i=0;32>i;i++){ newSel.options[newSel.length] = new Option(i); } var newLine = document.createElement("HR"); mother.appendChild(newLine); } </script> -- det har også den fordel, at når man benytter metoder taget fra standarden, vil det virke i alle nutidige browsere !-)
Mange takker :-D Tryk svar :-)
-- iøvrigt kan du også sætte alle de attributter, du måtte ønske: newSel.size = '1'; newSel.className = 'inputbox'; osv.
16. juli 2005 - 22:06
#10
Så nu kører det ;-) Dog mangler jeg at den skal indsætte et mellemrum mellem dropdown-boxene (ikke et linieskift) og så mangler jeg også at få getYear() eller en lignende indbygget js-funktion til at virke. Noget du kan hjælpe mig med? <script type="text/javascript"> function appendSelect(){ var mother = document.getElementById('motherDiv'); var newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'Date_Day'; mother.appendChild(newSel); for(i=0;32>i;i++){ newSel.options[newSel.length] = new Option(i); } var newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'Date_Month'; mother.appendChild(newSel); for(i=0;13>i;i++){ newSel.options[newSel.length] = new Option(i); } var newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'Date_Year'; mother.appendChild(newSel); //3 år frem i tiden for(i=0;3>i;i++){ newSel.options[newSel.length] = new Option(getYear() + i); } var newLine = document.createElement("HR"); mother.appendChild(newLine); } </script>
16. juli 2005 - 22:16
#11
Nå fik selv datoen til at virke: newSel.options[newSel.length] = new Option(new Date().getYear() + i); Roder nu rundt med at få indsat det mellemrum, så dropdown-boxene ikke sidder lige op ad hinanden.
16. juli 2005 - 22:16
#12
className svarer til class-attributten, så hvis du vil have, at den skal have et navn skal du sætte .name !-) Men f.eks. sådan: <div id="motherDiv"> </div> <button onclick="appendSelect()">Indsæt ny select</button> <script type="text/javascript"> function appendSelect(){ var mother = document.getElementById('motherDiv'); var newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Day'; mother.appendChild(newSel); for(i=0;32>i;i++){ newSel.options[newSel.length] = new Option(i); } var dash = document.createTextNode(" "); mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Month'; mother.appendChild(newSel); for(i=0;13>i;i++){ newSel.options[newSel.length] = new Option(i); } dash = dash.cloneNode(true); mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Year'; mother.appendChild(newSel); //3 år frem i tiden var year = new Date().getFullYear(); for(i=0;3>i;i++){ newSel.options[newSel.length] = new Option(year + i); } dash = dash.cloneNode(true); mother.appendChild(dash); var newLine = document.createElement("HR"); mother.appendChild(newLine); } </script> -- du skal bare være opmærksom på, at det kan blive besværligt at aflæse server-side, hvis du har en hel stribe elementer med det samme navn !-)
16. juli 2005 - 22:18
#13
Takker igen :-)
16. juli 2005 - 22:46
#14
Ja, nu ser jeg, hvad du mener med at håndtere det på server-siden (asp for mit vedkomne). Hvordan løser man det? Kan man sætte select-taggene ind i en for-løkke også? Og hvordan gør man det smartest?
16. juli 2005 - 22:55
#15
Nu har jeg løst det på en anden måde: <script type="text/javascript"> var intSelects = 0; function appendSelect(){ intSelects++; var mother = document.getElementById('motherDiv'); var newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Day' + intSelects; mother.appendChild(newSel); for(i=0;32>i;i++){ newSel.options[newSel.length] = new Option(i); } var dash = document.createTextNode(" "); mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Month' + intSelects; mother.appendChild(newSel); for(i=0;13>i;i++){ newSel.options[newSel.length] = new Option(i); } dash = dash.cloneNode(true); mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Year' + intSelects; mother.appendChild(newSel); //3 år frem i tiden var year = new Date().getFullYear(); for(i=0;3>i;i++){ newSel.options[newSel.length] = new Option(year + i); } dash = dash.cloneNode(true); mother.appendChild(dash); var newLine = document.createElement("HR"); mother.appendChild(newLine); } </script> Kan det gøres bedre?
16. juli 2005 - 23:06
#16
-- det kan gøres på mange andre måder, men det er absolut den simpleste, så skal du bare finde ud af, hvor mange der er, men det kan du vel sagtens ved bare at spørge på, om der findes en valgt værdi !-)
16. juli 2005 - 23:13
#17
Takker... og hvordan indsætter man så i value-delen i option-tagget her? newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Month' + intSelects; mother.appendChild(newSel); for(i=0;13>i;i++){ newSel.options[newSel.length] = new Option(i); } Jeg vil gerne have den synlige del af option til at indeholde månedens navn, men månedens værdi indsættes i value'n i tagget.
16. juli 2005 - 23:36
#18
F.eks. sådan: var mName = ['januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december']; for(i=0;13>i;i++){ newSel.options[newSel.length] = new Option(mName[i],i); }
16. juli 2005 - 23:38
#19
-- hov, der skal måske reguleres for måned nummer 0 eller 12, for mName[0] = 'januar' ...
17. juli 2005 - 00:34
#20
Takker :-)
17. juli 2005 - 11:36
#21
Hvordan bruger med selectedindex? Har prøvet: newSel.selectedIndex = 3; og newSel.selectedIndex[3] = true;
17. juli 2005 - 12:30
#22
Begge virker, men ikke i alle situationer ens, men jeg kan ikke påvise et mønster, jeg har simpelthen ikke gidet at lave en masse browser-testeri !-) -- men værdien skal selvfølgelig være relevant, så den kan(/bør) ikke sættes før options er smidt på ...
17. juli 2005 - 12:36
#23
Nå ja, det skal indsættes efter at optionen er sat, men hvordan gøres det? Følgende udsnit virker ikke: var dash = document.createTextNode(" "); mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Month' + intSelects; mother.appendChild(newSel); var mName = ['januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december']; for(i=0;13>i;i++){ newSel.options[newSel.length] = new Option(mName[i],i); } newSel.selectedIndex[3] = true; dash = dash.cloneNode(true); mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Year' + intSelects; mother.appendChild(newSel); Jeg forsøger at ramme marts-måned (bare for at se om det virker).
17. juli 2005 - 13:02
#24
Hov, jeg så forkert på dine forslag, for disse to virker: newSel.selectedIndex = 3; og newSel.options[3] = true; -- men de peger på den fjerde option, da den første har nummer 0, så du skal nok: //Dage for(i=1;32>i;i++){ newSel.options[newSel.length] = new Option(i); } //Måneder var mName = ['januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december']; for(i=0;12>i;i++){ newSel.options[newSel.length] = new Option(mName[i],i+1); } newSel.selectedIndex = 3
17. juli 2005 - 13:03
#25
Hov ... newSel.options[3].selected = true; -- sæ'fø'li'
17. juli 2005 - 13:36
#26
Takker igen :-)
17. juli 2005 - 17:48
#27
Håber at du gider at hjælpe mig igen :-) Sig bare til, hvis jeg skal oprette et nyt spg. Jeg vil gerne have funktionen til at plusse en uge til (set i forhold til den det sidste sæt dropdownboxe), for hvergang at folk trykker på knappen (så der kommer et nyt sæt dropdownbokse frem). Men desværre kan jeg ikke få Date() + 7 til at virke, som jeg kender fra VB. Så hvad gør man så? <script type="text/javascript"> var intSelects = 0; function appendSelect(){ intSelects++; if (intSelects == 1) { var thisDay = new Date().getDate(); var thisMonth = new Date().getMonth(); var thisYear = new Date().getFullYear(); } else { // plus en uge - men hvordan ?????????????????????????????????? var thisDay = parseInt(document.frmUser.elements["Date_Day" + (intSelects - 1)].value) + 7; var thisMonth = new Date().getMonth(); // mangler at gå til næste måned, hvis det er relevant var thisYear = new Date().getFullYear(); // mangler at gå til næste år, hvis det er relevant } var dash = document.createTextNode(" "); var mother = document.getElementById('motherDiv'); var newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Day' + intSelects; mother.appendChild(newSel); for(i=1;32>i;i++){ newSel.options[newSel.length] = new Option(i); } newSel.options[thisDay - 1].selected = true; mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Month' + intSelects; mother.appendChild(newSel); var mName = ['januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december']; for(i=1;12>i;i++){ newSel.options[newSel.length] = new Option(mName[i],i); } newSel.options[thisMonth - 1].selected = true; dash = dash.cloneNode(true); mother.appendChild(dash); newSel = document.createElement("SELECT"); newSel.size = '1'; newSel.className = 'inputbox'; newSel.name = 'Date_Year' + intSelects; mother.appendChild(newSel); //3 år frem i tiden for(i=0;3>i;i++){ newSel.options[newSel.length] = new Option(thisYear + i); } dash = dash.cloneNode(true); mother.appendChild(dash); var newLine = document.createElement("BR"); mother.appendChild(newLine); var newLine = document.createElement("BR"); mother.appendChild(newLine); }
17. juli 2005 - 18:04
#28
<ole> Så let er det desværre ikke at rode med form-elementer i DOM :o| IE har en elendig håndtering af DOM og kan ikke med DOM sætte en name-attribute på et element, oprettet via DOM. Prøv f.eks. dette script: <script type="text/JavaScript"> window.onload = function() { var sel = document.createElement("select"); sel.name = "gnu"; document.body.appendChild(sel); alert(document.body.innerHTML) } </script> - end ikke dette kan IE klare: <script type="text/JavaScript"> window.onload = function() { var sel = document.createElement("select"); sel.setAttribute("name", "gnu"); document.body.appendChild(sel); alert(document.body.innerHTML) } </script> Du er nødt til at lave et browsercheck - og hvis det er en IE, må du skrive: <script type="text/JavaScript"> window.onload = function() { var sel = document.createElement("<select name=\"gnu\"></select>"); document.body.appendChild(sel); alert(document.body.innerHTML) } </script> Husk i øvrigt, at tag-navnet bør skrives med småt i createElement ;o) /mvh </bole>
17. juli 2005 - 18:18
#29
Hej Olebole Ja, det er rigtigt nok. Min side funger heller ikke i IE (har jeg lige fundet ud af). Linien: var thisDay = parseInt(document.frmUser.elements["Date_Day" + (intSelects - 1)].value) + 7; Giver fejlen: 'document.frmUser.elements[...].value' Kan du hjælpe?
17. juli 2005 - 21:08
#30
Kan I hjælpe?
17. juli 2005 - 23:50
#31
Hvis jeg kører min side i IE, skriver den fejl ved: alert(document.frmUser.Date_Day1); Hvorimod den rigtigt nok udskriver værdien i Firefox. Findes der en løsning?
18. juli 2005 - 13:34
#32
Nå - løste selv problemet. Med IE kan man ikke aflæse value på et element, hvis ikke denne er sat som en value (men blot som en text). Det kan man godt i Firefox, som blot tager text'en som value i stedet. Så blev jeg lidt klogere. Det havde faktisk ikke noget med DOM at gøre. Takker for hjælpen. Mit script kører fint, dog skal det lige udbygges lidt med "dato-plusning", men det starter jeg bare i en frisk tråd. Lukker og slukker.
18. juli 2005 - 18:25
#33
axkris >> Du er for hurtig. Jeg kan være ligeglad, men det kan du vist ikke ;o) IE kan ikke sætte name-attributter på form-elementer på den måde, du forsøger at gøre det. Prøv nu de eksempler, jeg skrev ... det var derfor, jeg skrev dem til dig ;o)
Vi tilbyder markedets bedste kurser inden for webudvikling