0
我正在嘗試創建一個下拉日曆。沒有jquery!純JavaScript。到目前爲止,@rlemon已經爲我提供了很大的幫助,並且我已經能夠構建出他幫助過我的代碼。我差不多完成了,但遇到一些小問題。到目前爲止,一切工作都正常,但現在我正在將閏年納入其中,這是我遇到問題的地方。我無法確定所選的當年。我有Javascript下拉功能
sel_year.onchange = recalculateDays2(this);
我相信是通過當年選定的價值。然後在功能recalculateDays2我創建一個變量
year_index = x.text;
這應該是這樣的year_index = 2011,2012等。我想要的功能recalculateDays2至二月天設定爲29,當用戶已經改變爲一年2012年請幫助...
<html>
<head>
</head>
<body>
Calendar<br>
<hr align="left" width="200px"/>
--Year ------ Month ----- Day<br>
<div id="calendar-container"></div>
<script type="text/javascript">
(function() {
var yr1 = 2011, yr2 = 2012, yr3 = 2013, yr4 = 2014;
var years = [yr1, yr2, yr3, yr4];
var calendar = [
["January", 31],["February", 28],["March", 31],["April", 30],["May", 31],["June", 30],["July", 31],["August", 31],["September", 30],["October", 31],["November", 30],["December", 31]],
//this is the variable that accesses the content
cont = document.getElementById('calendar-container');
//creates the variables for the drop downs
var sel_year = document.createElement('select'), sel_month = document.createElement('select'), sel_day = document.createElement('select');
function createOption(txt, val) {
//this creates the option but it seems that it is making the value -1 than what the text node is
var option = document.createElement('option');
option.value = val;
option.appendChild(document.createTextNode(txt));
return option;
}
function createYearOption(val) {
var option = document.createElement('option');
option.value = val;
option.appendChild(document.createTextNode(val));
return option;
}
//this clears any elements for days, months, years
function clearChildren(ele) {
while (ele.hasChildNodes()) {
ele.removeChild(ele.lastChild);
}
}
//this function is only triggered when you recalculate the months
function recalculateDays() {
var month_index = sel_month.value,
df = document.createDocumentFragment();
//l is the variable for the number of days in the month from the array above ex:28, 30, 31
for (var i = 0, l = calendar[month_index][1]; i < l; i++) {
//the first variable is what number will be displayed in the day drop down
df.appendChild(createOption(i + 1, i));
}
clearChildren(sel_day);
sel_day.appendChild(df);
}
//this function is triggered only when you change the year
function recalculateDays2(x) {
var month_index = sel_month.value,
df = document.createDocumentFragment(),
year_index = x.text;
//this checks to see if the month selected is Feb
if ((month_index == 1) && (year_index == 2012)) {
//l is the variable for the number of days in the month from the array above ex:28, 30, 31
for (var i = 0, l = calendar[month_index][1]; i < l + 1; i++) {
//the first variable is what number will be displayed in the day drop down
df.appendChild(createOption(i + 1, i));
}
clearChildren(sel_day);
sel_day.appendChild(df);
} else {}}
function generateMonths() {
var df = document.createDocumentFragment();
calendar.forEach(function(info, i) {
df.appendChild(createOption(info[0], i));
});
//clears past months
clearChildren(sel_month);
//appends new months onto variable df
sel_month.appendChild(df);
}
function generateYears() {
var df = document.createDocumentFragment();
years.forEach(function(i) {
df.appendChild(createYearOption(i));
});
//clears past months
clearChildren(sel_year);
//appends new months onto variable df
sel_year.appendChild(df);
}
//anytime the month selector is changed this calls the function to change the days
sel_month.onchange = recalculateDays;
sel_year.onchange = recalculateDays2(this);
//i believe this automatically runs the months and days functions specifically for when first loading the page
generateMonths();
recalculateDays();
generateYears();
//this is what displays each of the individual drop downs after everything has been done to them
cont.appendChild(sel_year);
cont.appendChild(sel_month);
cont.appendChild(sel_day);
}());
</script>
</body>
</html>