Reputation: 263
I have 3 dropdowns for year, month and day. The dropdown is working properly when I clicked a year, it loads a month and after I choose a month its loads the dates. The problem I encountered is when I choose the year, month and date. for example the date I choose is:
year --> 1990 month-->2
the dates are only 28 days. working properly.
but when I changed to a new year the month is become 1 and the dates still display 28 days it should display 31 days.
I am planning to include a onload in body tag or in select but not works at all. Any suggestions?
function daysInMonth(m, y){
return m===2?y&3||!(y%25)&&y&15?28:29:30+(m+(m>>3)&1);
}
var monthArray = [];
var dateArray = [];
function onYearChange() {
monthArray =[];
var year = document.getElementById("yeardialog").value
if (document.getElementById("yeardialog").value != "0"){
for(var i = 1 ; i<=12; i++){
monthArray.push(i + '');
dateArray.push(daysInMonth(i, year));
}
var select = document.getElementById("monthdialog");
select.innerHTML = "";
for(var i = 0; i < monthArray.length; i++) {
var monthOptions = monthArray[i].replace('', '');
var el = document.createElement("option");
el.textContent = monthOptions + '';
if(monthOptions<10){
monthOptions = '0'+monthOptions
}
el.value = monthOptions;
select.appendChild(el);
}
console.log(monthArray);
}
}
function onMonthChange(){
if(dateArray.length>12){
dateArray.splice(0, 12);
}
var dates =[];
var month = document.getElementById("monthdialog").value;
var endDay = dateArray[month.replace('', '')-1];
for(var date = 1; date<=endDay; date++){
dates.push(date + '');
}
var select = document.getElementById("datedialog");
select.innerHTML = "";
for(var i = 0; i < dates.length; i++) {
var dateOptions = dates[i].replace('', '');
var el = document.createElement("option");
el.textContent = dateOptions + '';
if(dateOptions<10){
dateOptions = '0'+dateOptions
}
el.value = dateOptions;
select.appendChild(el);
}
}
<select id="yeardialog" name="yeardialog" onchange="onYearChange()">
<option value="">--</option>
<option value="1990">1990</option>
<option value="1991">1991</option>
<option value="1992">1992</option>
</select>
<select id="monthdialog" onchange="onMonthChange()">
<option></option>
</select>
<select id="datedialog">
<option></option>
</select>
I want to solve it today.
Upvotes: 0
Views: 2637
Reputation: 3584
function onYearChange() {
monthArray =[];
var year = document.getElementById("yeardialog").value
if (document.getElementById("yeardialog").value != "0"){
for(var i = 1 ; i<=12; i++){
monthArray.push(i + '');
dateArray.push(daysInMonth(i, year));
}
var select = document.getElementById("monthdialog");
select.innerHTML = "";
for(var i = 0; i < monthArray.length; i++) {
var monthOptions =monthArray[i].replace('', '');
var el = document.createElement("option");
el.textContent = monthOptions + '';
if(monthOptions<10){
monthOptions = '0'+monthOptions
}
el.value = monthOptions;
select.appendChild(el);
}
console.log(monthArray);
}
onMonthChange();
}
call `onMonthChange();` function inside `onYearChange();`
because date will be loaded on month change. since year change does not trigger month change event that's why date dropdown was not loading.
Upvotes: 0
Reputation: 595
function daysInMonth(m, y){
return m===2?y&3||!(y%25)&&y&15?28:29:30+(m+(m>>3)&1);
}
var monthArray = [];
var dateArray = [];
function onYearChange() {
monthArray =[];
var year = document.getElementById("yeardialog").value
if (document.getElementById("yeardialog").value != "0"){
for(var i = 1 ; i<=12; i++){
monthArray.push(i + '');
dateArray.push(daysInMonth(i, year));
}
var select = document.getElementById("monthdialog");
select.innerHTML = "";
for(var i = 0; i < monthArray.length; i++) {
var monthOptions = monthArray[i].replace('', '');
var el = document.createElement("option");
el.textContent = monthOptions + '';
if(monthOptions<10){
monthOptions = '0'+monthOptions
}
el.value = monthOptions;
select.appendChild(el);
}
onMonthChange();
console.log(monthArray);
}
}
function onMonthChange(){
if(dateArray.length>12){
dateArray.splice(0, 12);
}
var dates =[];
var month = document.getElementById("monthdialog").value;
var endDay = dateArray[month.replace('', '')-1];
for(var date = 1; date<=endDay; date++){
dates.push(date + '');
}
var select = document.getElementById("datedialog");
select.innerHTML = "";
for(var i = 0; i < dates.length; i++) {
var dateOptions = dates[i].replace('', '');
var el = document.createElement("option");
el.textContent = dateOptions + '';
if(dateOptions<10){
dateOptions = '0'+dateOptions
}
el.value = dateOptions;
select.appendChild(el);
}
}
<select id="yeardialog" name="yeardialog" onchange="onYearChange()">
<option value="">--</option>
<option value="1990">1990</option>
<option value="1991">1991</option>
<option value="1992">1992</option>
</select>
<select id="monthdialog" onchange="onMonthChange()">
<option></option>
</select>
<select id="datedialog">
<option></option>
</select>
Upvotes: 1
Reputation: 149
Simply add the onMonthChange() after onYearChange() in year drop down. It will work.
Upvotes: 1