英国最大的JS noob试图在一个月内输入1-12的日子。
有没有可以告诉我自己做错了什么的很棒的人?
JS:
window.onload = funkytown;
var mnd = [[0, "Jan"], [1, "Feb"], [2, "Mar"], [3, "Apr"], [4, "Mai"], [5, "Jun"], [6, "Jul"], [7, "Aug"], [8, "Sep"], [9, "Okt"], [10, "Nov"], [11, "Des"]];
var days = [[0, 31], [1, 28], [2, 31], [3, 30], [4, 31], [5, 30], [6, 31], [7, 31], [8, 30], [9, 31], [10, 30], [11, 31]];
function funkytown() {
document.getElementById("button").onclick = calender;
}
function calender() {
var tall = parseint(document.getElementById)("box").value;
if(tall >= 1 && tall <= 12) {
var mndminus = tall - 1;
for(i = 0; i < mnd.length; i++) {
if(mnd[i][0] == mndminus) {
document.getElementById("text").innerHTML = mnd[i][1] + " - " + days[i][1];
}
}
}
}
HTML:
<input type="number" id="box" max="12" />
<input type="button" id="button" value="Trykk" />
<span id="text"></span>
谢谢!
答案 0 :(得分:1)
您只需要替换此行:
var tall = parseint(document.getElementById)("box").value;
通过:
var tall = parseInt(document.getElementById("box").value);
parseint
parseInt
和)
之后的getElementById
应该在行尾。{/ p>
希望这有帮助。
var mnd = [[0, "Jan"], [1, "Feb"], [2, "Mar"], [3, "Apr"], [4, "Mai"], [5, "Jun"], [6, "Jul"], [7, "Aug"], [8, "Sep"], [9, "Okt"], [10, "Nov"], [11, "Des"]];
var days = [[0, 31], [1, 28], [2, 31], [3, 30], [4, 31], [5, 30], [6, 31], [7, 31], [8, 30], [9, 31], [10, 30], [11, 31]];
function funkytown() {
document.getElementById("button").onclick = calender;
}
function calender() {
var tall = parseInt(document.getElementById("box").value);
if(tall >= 1 && tall <= 12) {
var mndminus = tall - 1;
for(i = 0; i < mnd.length; i++) {
if(mnd[i][0] == mndminus) {
document.getElementById("text").innerHTML = mnd[i][1] + " - " + days[i][1];
}
}
}
}
funkytown();
&#13;
<input type="number" id="box" max="12" />
<input type="button" id="button" value="Trykk" />
<span id="text"></span>
&#13;
答案 1 :(得分:1)
正如dandavis的评论所指出的那样
由于闰年,二月并不总是有28天。你会好起来的
创建一个函数来计算一个月中的天数。幸运的是,
使用JavaScript有一种相对简单的方法。如果您设置日期
使用Date constructor至0
要么
Date.prototype.setDate,
生成的Date
对象将设置为上个月的最后一天,
使用此功能,我们可以轻松创建一个函数来获取一个月内的天数。
function getDaysInMonth(month) {
var d = new Date();
d.setMonth(month + 1);
d.setDate(0);
return d.getDate();
}
此函数期望month
与Date
构造函数一样从零开始
(意味着它希望month
是0
和11
之间的数字,而不是1
和12
)。
var days = getDaysInMonth(mndminus);
我还建议使用不同的数据结构来查找月份 名称。而不是循环遍历两元素数组的数组,而是使用对象 作为字典。
var monthLookup = {
0: "Jan",
1: "Feb",
2: "Mar",
3: "Apr",
4: "Mai",
5: "Jun",
6: "Jul",
7: "Aug",
8: "Sep",
9: "Okt",
10: "Nov",
11: "Des"
};
然后查看月份就像monthLookup[mndminus]
一样简单。
通过这些更改,您的代码将如下所示:
var getDaysInMonth = function (month) {
var d = new Date();
d.setMonth(month + 1);
d.setDate(0);
return d.getDate();
},
monthLookup = {
0: "Jan",
1: "Feb",
2: "Mar",
3: "Apr",
4: "Mai",
5: "Jun",
6: "Jul",
7: "Aug",
8: "Sep",
9: "Okt",
10: "Nov",
11: "Des"
},
calender = function () {
var tall = parseInt(document.getElementById("box").value, 10),
mndminus;
if (tall >= 1 && tall <= 12) {
mndminus = tall - 1;
document.getElementById("text").innerHTML = monthLookup[mndminus] + " - " + getDaysInMonth(mndminus);
}
},
funkytown = function () {
document.getElementById("button").onclick = calender;
};
window.onload = funkytown;
您会注意到我使用了函数声明而不是函数声明。 This article 能很好地解释每一个是什么以及为什么它通常都是好的 练习使用声明而不是语句。
要注意的事情,记得要经常声明你的变量!
您的原始代码未声明i
,这使其成为隐式全局代码。
隐式全局变量可能会导致各种奇怪的错误,特别是如果它是常见的
像i
这样的变量名可能会在代码的其他地方使用。也,
如果您使用循环搜索数组,则可以使用break
statement
一旦找到了您正在寻找的项目,就提前退出循环。没有
一个break;
语句,您的代码无论如何都会测试数组中的所有12个项目
您正在寻找的月份,即使它是1月份,也可以在第一个月找到
迭代。
我还建议学习使用JSHint或JSLint,它们是帮助您改进代码的绝佳工具。他们特别擅长发现像隐式全局变量这样的常见错误,并且会在你疯狂之前将这些事情指出来之前为你节省大量的时间。