Avatar billede weblance Nybegynder
17. marts 2008 - 22:05 Der er 9 kommentarer og
1 løsning

Dymanisk <select> til dato

Jeg vil gerne lavet to select bokse, hvor den ene ideholder månederne og den anden antal dage i måneden:

Eks.
Select 1: Januar
Select 2: 1,2,3,4,5,6,7...31

Hvordan laves det sådan at indholdet Select 2 først vises når måneden i Select 1 er valgt? Og er det muligt at tage skudår med i betragtning?
Avatar billede kalp Novice
17. marts 2008 - 22:59 #1
<HTML>
  <HEAD>
  <SCRIPT language=Javascript>
     
function getDates(month) {
  var minusDays = 0;
  var maxDays = 31;

  // håber jeg husker rigtig med antal dage i hver måned;o)
  if(month == "februar") minusDays = 2;
  if(month == "april") minusDays = 1;
  if(month == "juni") minusDays = 1;
  if(month == "september") minusDays = 1;
  if(month == "november") minusDays = 1;
  maxDays = maxDays - minusDays;
  var daySelect = document.getElementById('Days');

  daySelect.options.length = 0;

  for(var days = 1; days < maxDays+1; days++)
  {
    daySelect.options[daySelect.options.length] = new Option(days, daySelect);
  }


     
  </SCRIPT>
  </HEAD>
  <BODY onload="getDates('januar');">
  Vælge måned:
    <select id="Months" onchange="getDates(this.value);">
          <option value ="januar">Januar</option>
          <option value ="februar">Februar</option>
          <option value ="marts">Marts</option>
          <option value ="april">April</option>
          <option value ="maj">Maj</option>
          <option value ="juni">Juni</option>
          <option value ="juli">Juli</option>
          <option value ="august">August</option>
          <option value ="september">September</option>
          <option value ="oktober">Oktober</option>
          <option value ="november">November</option>
          <option value ="december">December</option>
    </select>
Vælge dag:
<select id="Days"></select>

  </BODY>
</HTML>
Avatar billede kalp Novice
17. marts 2008 - 23:00 #2
der er ikke noget med skudår i det der..
men det virker ellers fint.
Avatar billede roenving Novice
17. marts 2008 - 23:07 #3
-- jeg ville sikre at en ændring skete med en null-value som start, og så er det ikke specielt svært at gennemskue skudår, når den næste afvigelse kommer i år 2100 ...

-- men hvis det virker allerede skal det jo ikke laves om !-)
Avatar billede kalp Novice
17. marts 2008 - 23:11 #4
Jeg har lige lavet koden til denne tråd, så jeg har ikke rigtig testet det igennem, men det så da ud til, at fungere:)
Månederne fik de dage de skulle have i den anden select boks.

men det okay, at ændre i koden:)
Avatar billede olebole Juniormester
18. marts 2008 - 01:57 #5
<ole>

Dette burde dække skudår til længe efter, du er død - forudsat, der er tale om det til enhver tid aktuelle årstal  ;o)
    if(month == "februar") minusDays = new Date().getFullYear()%4==0 ? 2 : 3;

Ellers må du yderligere fodre funktionen med et årstal:
    function getDates(month, year) {

- og skrive:
    if(month == "februar") minusDays = year%4==0 ? 2 : 3;

/mvh
</bole>
Avatar billede weblance Nybegynder
18. marts 2008 - 08:02 #6
Ser godt ud. Hvordan får man det så sådan at den måned man er i er den der er valgt default? Går næsten ud fra at det har noget med <BODY onload="getDates('januar');"> at gøre.
Avatar billede kalp Novice
18. marts 2008 - 08:29 #7
jeg har ikke tilføjet det med skudår, men det har du fået bud på hvordan kan gøres;)

her er vælger den måneden man er i.


<HTML>
  <HEAD>
  <SCRIPT language=Javascript>
     
function getDates(month) {
  var minusDays = 0;
  var maxDays = 31;
  if(month == "currentMonth"){
    var currentMonth = new Date().getMonth();
    var monthSelect = document.getElementById('Months');
    monthSelect.selectedIndex = currentMonth;
    month = monthSelect.value;
  }
  // håber jeg husker rigtig med antal dage i hver måned;o)
  if(month == "februar") minusDays = 2;
  if(month == "april") minusDays = 1;
  if(month == "juni") minusDays = 1;
  if(month == "september") minusDays = 1;
  if(month == "november") minusDays = 1;
  maxDays = maxDays - minusDays;
  var daySelect = document.getElementById('Days');

  daySelect.options.length = 0;

  for(var days = 1; days < maxDays+1; days++)
  {
    daySelect.options[daySelect.options.length] = new Option(days, daySelect);
  }


     
  </SCRIPT>
  </HEAD>
  <BODY onload="getDates('currentMonth');">
  Vælge måned:
    <select id="Months" onchange="getDates(this.value);">
          <option value ="januar">Januar</option>
          <option value ="februar">Februar</option>
          <option value ="marts">Marts</option>
          <option value ="april">April</option>
          <option value ="maj">Maj</option>
          <option value ="juni">Juni</option>
          <option value ="juli">Juli</option>
          <option value ="august">August</option>
          <option value ="september">September</option>
          <option value ="oktober">Oktober</option>
          <option value ="november">November</option>
          <option value ="december">December</option>
    </select>
Vælge dag:
<select id="Days"></select>

  </BODY>
</HTML>
Avatar billede weblance Nybegynder
18. marts 2008 - 11:47 #8
Skønt - tusind tak for hjælp!

Sådan for at presse citronen til det yderste ;) er det muligt at dagen også er valgt på forhånd, ligesom måneden?
Avatar billede kalp Novice
18. marts 2008 - 12:52 #9
måske

<HTML>
  <HEAD>
  <SCRIPT language=Javascript>
     
function getDates(month) {
  var minusDays = 0;
  var maxDays = 31;
  var preselectDay = false;
  if(month == "currentMonth"){
    preselectDay = true;
    var currentMonth = new Date().getMonth();
    var monthSelect = document.getElementById('Months');
    monthSelect.selectedIndex = currentMonth;
    month = monthSelect.value;
  }
  // håber jeg husker rigtig med antal dage i hver måned;o)
  if(month == "februar") minusDays = 2;
  if(month == "april") minusDays = 1;
  if(month == "juni") minusDays = 1;
  if(month == "september") minusDays = 1;
  if(month == "november") minusDays = 1;
  maxDays = maxDays - minusDays;
  var daySelect = document.getElementById('Days');

  daySelect.options.length = 0;

  for(var days = 1; days < maxDays+1; days++)
  {
    daySelect.options[daySelect.options.length] = new Option(days, daySelect);
  }
  if(preselectDay){
    daySelect.selectedIndex = new Date().getDate()-1;
  }


     
  </SCRIPT>
  </HEAD>
  <BODY onload="getDates('currentMonth');">
  Vælge måned:
    <select id="Months" onchange="getDates(this.value);">
          <option value ="januar">Januar</option>
          <option value ="februar">Februar</option>
          <option value ="marts">Marts</option>
          <option value ="april">April</option>
          <option value ="maj">Maj</option>
          <option value ="juni">Juni</option>
          <option value ="juli">Juli</option>
          <option value ="august">August</option>
          <option value ="september">September</option>
          <option value ="oktober">Oktober</option>
          <option value ="november">November</option>
          <option value ="december">December</option>
    </select>
Vælge dag:
<select id="Days"></select>

  </BODY>
</HTML>
Avatar billede weblance Nybegynder
18. marts 2008 - 13:03 #10
Tak for det!
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