Jag har en sida med 3st SELECT-boxar: År, Månad, Dag. Antalet dagar en viss månad beräknar jag med php:s date() - inga problem. Problemet ligger i att få antalet valbara dagar att ändras då man byter år och/eller månad (ex. februari vid skottår). Jag har lyckats koda en lösning på detta (med onChange och $_GET...), men sidan behöver då laddas om och all övrig data (i andra fält) går förlorad...
Kan någon hjälpa mig med någon lösning som inte kräver "omladdning".
Är ingen hejare på JS...:OO
Detta funkar ju (tar dock inte hänsyn till skottår..)
<SCRIPT type="text/JavaScript">
// Antal dagar i månaden
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>
Jag var tvungen att skriva ett litet script för det. Det är skrivet för att kunna spara ner objektet dateSelect i en extern .js-fil om du vill. Datumet som skall markeras anger du som ett date-objekt i dateSelect.date.
Lite overkill, men kan vara bra att ha någon gång kanske. Anm. använder du date-objektet i JS så behöver du inte hålla reda på vad som är skottår eller inte.
Tar upp en gammal tråd...
Jag håller på med en kalender och den visar bara 26 dagar i februari, 28 dagar på adminsidan oavsett om det är skottår eller inte. Finns det någon som kan kolla om detta är rätt i jsscriptet.
function setDays(month,year,objectid){
var monthdays = new Array(31,0,31,30,31,30,31,31,30,31,30,31);
monthdays[1] = (year%4 == 0) ? 29 : 28;
var d = document;
var _id = d.getElementById(objectid);
var _tag = _id.getElementsByTagName('option');
if(_tag.length != monthdays[month-1]){
for(a=_tag.length-1;a>-1;a--){
_tag[a].removeChild(_tag[a].firstChild);
_id.removeChild(_tag[a]);
}
for(a=0;a<monthdays[month-1];a++){
e_option = d.createElement('option');
label = (a<9) ? '0' + (a+1) : a+1;
e_label = d.createTextNode(label);
_id.appendChild(e_option);
_tag[a].setAttribute('value',a+1);
_tag[a].appendChild(e_label);
}
Jag skulle bli väldigt tacksam för hjälp... så jag kan utesluta detta om det är rätt :)
265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2