---
title: "OnChange, Select, månader och dagar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/116810-onchange-select-månader-och-dagar"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "patflat"
published: "2004-11-27T13:56:16.000Z"
updated: "2006-01-08T11:22:21.000Z"
replies: 8
views: 552
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/116810-onchange-select-månader-och-dagar"
---

# OnChange, Select, månader och dagar

## #1 — patflat, 2004-11-27T13:56Z

Hej.

Jag lurar på en grej.
Jag har i en dropdown-meny månader Jan - Dec
Vad jag skulle vilja är att då jag väljer Tex Dec så ska nästa dropdown-meny fyllas med dagarna för den månaden.
Alltså 1 till 31
Hur gör man detta?
Om någon har gjort något liknande så skulle jag bli glad av att få se lite kod som en hjälp på traven.

Permalänk: https://www.webforum.nu/p/116810

## #2 — dectgap, 2004-11-27T14:15Z

```
<script type="text/javascript">
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function fillDays(daysObj, month) {
	// Ta bort dagar
	while(daysObj.options[0])
		daysObj.options[0] = null;

	// Lägg till de nya dagarna
	if(month) {
		daysObj.length = days[month-1];
		var i = 0;
		while(i < days[month-1])
			daysObj.options[i] =  new Option(++i);
	} else {
		daysObj.length = 1;
		daysObj.options[0] = new Option("--");
	}
}
</script>

...

<form>

<select name="manad" onchange="fillDays(this.form.dag, this.selectedIndex)">
	<option>Välj månad</option>
	<option>Januari</option>
	<option>Februari</option>
	<option>Mars</option>
	<option>April</option>
	<option>Maj</option>
	<option>Juni</option>
	<option>Juli</option>
	<option>Augusti</option>
	<option>September</option>
	<option>Oktober</option>
	<option>November</option>
	<option>December</option>
</select>

<select name="dag">
	<option>--</option>
</select>

</form>
```

Permalänk: https://www.webforum.nu/p/1493275

## #3 — patflat, 2004-11-27T14:16Z

Supernice.
Tack jättemycket för hjälpen.

Permalänk: https://www.webforum.nu/p/1493277

## #4 — wborg, 2005-11-22T00:15Z

Tja,

råkade snubbla över detta inlägg och studerade koden lite, det jag kom å tänka på är att det faktiskt är 29 dagar i februari vart 4:e år. Går det att lösa på ngt bra sätt?

/S

Permalänk: https://www.webforum.nu/p/1713752

## #5 — colione, 2005-11-22T09:27Z

En lösning:

```
<script type="text/javascript">
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

[B]var year=new Date().getYear() // om du vill plocka årtalet från systemklockan

if (year % 4 == 0) days[1]++ //kollar om värdet i year är jämt delbart med fyra, om det är det plusa på en dag i days[1][/B]

function fillDays(daysObj, month) {
	// Ta bort dagar
	while(daysObj.options[0])
		daysObj.options[0] = null;

	// Lägg till de nya dagarna
	if(month) {
		daysObj.length = days[month-1];
		var i = 0;
		while(i < days[month-1])
			daysObj.options[i] =  new Option(++i);
	} else {
		daysObj.length = 1;
		daysObj.options[0] = new Option("--");
	}
}
</script>

...

<form>

<select name="manad" onchange="fillDays(this.form.dag, this.selectedIndex)">
	<option>Välj månad</option>
	<option>Januari</option>
	<option>Februari</option>
	<option>Mars</option>
	<option>April</option>
	<option>Maj</option>
	<option>Juni</option>
	<option>Juli</option>
	<option>Augusti</option>
	<option>September</option>
	<option>Oktober</option>
	<option>November</option>
	<option>December</option>
</select>

<select name="dag">
	<option>--</option>
</select>

</form>
```

Permalänk: https://www.webforum.nu/p/1713798

## #6 — dapper, 2005-11-22T12:32Z

Kan göra så här, om du inte gillar mod4 lösningar.

"Every year divisible by 4 is a leap year. 
But every year divisible by 100 is NOT a leap year 
Unless the year is also divisible by 400, then it is still a leap year." 
\-- <http://www.timeanddate.com/date/leapyear.html>

^ orka % 3 olika tal.

```
<html>
<head>
<script type="text/javascript">
	var date = new Date();
	var days = [];

	for(var i=0;i<12;++i) {
		date.setMonth(i+1); date.setDate(0);
		days[i] = date.getDate();
	}

	function buildDate(month) {
		var el = document.frm.days;
		el.options.length = 0;
		var i = 0;
		while(i<days[month]) {
			var day = document.createElement("Option");
			day.text = day.value = i+1;
			if(navigator.appName=="Microsoft Internet Explorer") {
				el.add(day)
			} else { el.add(day, null); }
			++i;			
		}		
	}
</script>
</head>
<body>

	<form name="frm">
		<select name="month" onchange="buildDate(this.value)">
			<option value="0">Januari</option>
			<option value="1">Februari</option>
			<option value="2">Mars</option>
			<option value="3">Maj</option>
			<option value="4">April</option>
			<option value="5">etc..</option>
		</select>
		<select name="days"></select>
	</form>

</body>
</html>
```

Permalänk: https://www.webforum.nu/p/1713855

## #7 — Peter S, 2005-11-22T15:47Z

```
var days = [31, 28 + (n % 4 == 0 && (n % 100 != 0 || n % 400 == 0)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
```

Permalänk: https://www.webforum.nu/p/1713916

## #8 — wborg, 2006-01-08T00:50Z

Hej!

```
<html>
<head>
  <title></title>

<script type="text/javascript">
var days = [31, 28 + (n % 4 == 0 && (n % 100 != 0 || n % 400 == 0)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function fillDays(daysObj, month) {
	// Ta bort dagar
	while(daysObj.options[0])
		daysObj.options[0] = null;

	// Lägg till de nya dagarna
	if(month) {
		daysObj.length = days[month-1];
		var i = 0;
		while(i < days[month-1])
			daysObj.options[i] =  new Option(++i);
	} else {
		daysObj.length = 1;
		daysObj.options[0] = new Option("--");
	}
}
</script>
</head>

<body>

<form>

<select name="manad" onchange="fillDays(this.form.dag, this.selectedIndex)">
	<option>Välj månad</option>
	<option>Januari</option>
	<option>Februari</option>
	<option>Mars</option>
	<option>April</option>
	<option>Maj</option>
	<option>Juni</option>
	<option>Juli</option>
	<option>Augusti</option>
	<option>September</option>
	<option>Oktober</option>
	<option>November</option>
	<option>December</option>
</select>

<select name="dag">
	<option>--</option>
</select>

</form>
</body>
```

När jag laddar sidan så får jag upp följande felmeddelande:

Ett fel har uppstått under körning.
Vill du göra en felsökning?

Rad: 5
Fel: 'n' är odefinierad.

När jag klickade JA så kunde felsökningsprogrammet inte visa källkoden av någon anledning
så jag valde att klicka NEJ istället och då kom jag in på sidan.

När jag nu väljer månad så får jag istället upp följabde fel:

Ett fel har uppstått under körning.
Vill du göra en felsökning?

Rad: 14
Fel: 'days' är null eller inte ett objekt.

Någon som ser vad som är fel??

/wborg

Permalänk: https://www.webforum.nu/p/1743434

## #9 — Peter S, 2006-01-08T11:22Z

Hej!

'n' är som sagt odefinierad:

```
var year = new Date().getFullYear();
var days = [31, 28 + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
```

  :)

Permalänk: https://www.webforum.nu/p/1743512

---

Tråden på webben: https://www.webforum.nu/amne/javascript/116810-onchange-select-månader-och-dagar
