westmanMedlem sedan aug. 2004279 inlägg
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
westmanMedlem sedan aug. 2004279 inlägg
Hjälp
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>
Anrop i månad-SELECT:
onChange="fillDays(this.form.dag, this.selectedIndex)"
Dag-SELECT:
<select name="dag">
<option>--</option>
</select>
Men nu vill jag att ett visst datum skall vara markerat, "selected" (ibland dagens och ibland ett annnat). Detta datum ligger i $markedDate
nitro2k01Medlem sedan aug. 20037 630 inlägg
Lösning på skottårsfrågan:
var days = [31, (year%4)?28:29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
westmanMedlem sedan aug. 2004279 inlägg
tackar! kanske du kan hjälpa mig med selected date oxå? :)
@ndersMedlem sedan juni 200026 914 inlägg
OT: nitros skottårslösning är inte helt komplett. Årtal som är jämnt delbart med 100 är inte skottår, om det inte samtidigt är jämnt delbart med 400.
Mvh
nitro2k01Medlem sedan aug. 20037 630 inlägg
Jo jag vet, jag vet, och det är enkelt fixat, men nu var jag bara ute efter att göra enkel och funktionell som kod som fungerar i 395 år framåt.
var days = [31, (year%4)?28:((year%100)?29:((year%400)?28:29)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
Edit...
westmanMedlem sedan aug. 2004279 inlägg
Just, jag tänkte att applikationen kanske inte ser likadan ut om 400år.
$markedDate-grejen då? Ingen som har en finurlig lösning
westmanMedlem sedan aug. 2004279 inlägg
Vore supernice ifall ngn kan hjälpa mig med detta problem..!
JojoxxMedlem sedan juni 20004 306 inlägg
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.
<script type="text/javascript">
var dateSelect={
yearFieldName:"year",
monthFieldName:"month",
dateFieldName:"date",
date:new Date(),
updateDate:function(obj){
obj[this.dateFieldName].length=0;
for(var i=1;i<=new Date(obj[this.yearFieldName][obj[this.yearFieldName].selectedIndex].value,obj[this.monthFieldName].selectedIndex+1,0).getDate();i++){
obj[this.dateFieldName][i-1]=new Option(((i<10)?"0":"")+i,((i<10)?"0":"")+i);
}
},
insertYearList:function(){
document.write("<select name=\""+this.yearFieldName+"\" onchange=\"dateSelect.updateDate(this.form);\">");
for(var i=this.date.getFullYear()-10;i<this.date.getFullYear()+10;i++){
document.write("<option value=\""+i+"\" "+((this.date.getFullYear()==i)?"selected=\"selected\"":"")+">"+i+"</option>");
}
document.write("</select>");
},
insertMonthList:function(){
document.write("<select name=\""+this.monthFieldName+"\" onchange=\"dateSelect.updateDate(this.form);\">");
for(var i=1;i<=12;i++){
document.write("<option value=\""+((i<10)?"0":"")+i+"\" "+((this.date.getMonth()+1==i)?"selected=\"selected\"":"")+">"+((i<10)?"0":"")+i+"</option>");
}
document.write("</select>");
},
insertDateList:function(){
document.write("<select name=\""+this.dateFieldName+"\">");
for(var i=1;i<=new Date(this.date.getFullYear(),this.date.getMonth()+1,0).getDate();i++){
document.write("<option value=\""+((i<10)?"0":"")+i+"\" "+((this.date.getDate()==i)?"selected=\"selected\"":"")+">"+((i<10)?"0":"")+i+"</option>");
}
document.write("</select>");
}
}
dateSelect.date=new Date(2005,11,24); // Julafton
</script>
<form>
<script type="text/javascript">dateSelect.insertYearList();</script>
<script type="text/javascript">dateSelect.insertMonthList();</script>
<script type="text/javascript">dateSelect.insertDateList();</script>
</form>
westmanMedlem sedan aug. 2004279 inlägg
man tackar! lite overkill ja, men rätt ska vara rätt! ;)
tantenMedlem sedan nov. 20051 658 inlägg
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 :)