webForumDet fria alternativet

OnChange, Select, månader och dagar

8 svar · 531 visningar · startad av patflat

patflatMedlem sedan sep. 200421 inlägg
#1

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.

dectgapMedlem sedan sep. 20021 655 inlägg
#2
<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>
patflatMedlem sedan sep. 200421 inlägg
#3

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

wborgMedlem sedan dec. 2003209 inlägg
#4

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

colioneMedlem sedan juni 20014 421 inlägg
#5

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>
dapperMedlem sedan sep. 2005114 inlägg
#6

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>
Peter SMedlem sedan dec. 20025 483 inlägg
#7
var days = [31, 28 + (n % 4 == 0 && (n % 100 != 0 || n % 400 == 0)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
wborgMedlem sedan dec. 2003209 inlägg
#8

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

Peter SMedlem sedan dec. 20025 483 inlägg
#9

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];

:)

130 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)