老师好,输错时,有弹出警示框,但是值没有改变,怎么才能赋给变量正确的值?
来源:4-11 作业题
倾城丶空子许
2019-01-06 18:59:55
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS作业</title>
</head>
<body>
<script>
var year=function (){
var years=prompt("请输入出生年份:");
years = parseInt(years);
if (!(years > 0 && years <= 9999)) {
alert("请输入0-9999之间的年份!");
year();
}
return years;
};
var month=function () {
var months=prompt("请输入出生月份:");
months = parseInt(months);
if (!(months > 0 && months < 13)) {
alert("请输入1-12之间的月份!");
month();
}
return months;
};
var day=function () {
var days=prompt("请输入出生日期:");
days=parseInt(days);
if(!(days>0&&days<32)) {
alert("请输入1-31之间的天数!");
day();
}
return days;
};
function sum(year,month,day){
var d=[31,28,31,30,31,30,31,31,30,31,30,31];
year%4==0 && year%100!=0 || year%100==0 && year%400 ==0 ? d[1]+=1 : d[1];
var sum=0;
for(var i=0;i<month;i++){
sum+=d[i];
}
sum+=day;
document.write("您的生日是"+year+"中的第"+sum+"天");
}
sum(year(),month(),day());
</script>
</body>
</html>1回答
您好,例如此处:在返回年份之前输出一下月份,可以发现在输入错误年份后再输入正确年份,可以输出弹出框,也可以输出正确年份,但最后还是会把之前错误数值时产生的NAN输出,是因在内部嵌套调用函数造成的,当第一次错误时会执行内部year(),那么之后的第一次执行year函数时的return语句并没有执行,当内部year()流程执行完,会再次接着上次的执行,因此出现无法接收正确数值的情况。
var year=function (){
var years=prompt("请输入出生年份:");
years = parseInt(years);
if (!(years > 0 && years <= 9999)) {
alert("请输入0-9999之间的年份!");
year();
}
alert("新的"+years);
return years;
};使用循环进行处理,不要内部嵌套函数,当输入的数值正确时再退出,输入的值不正确时一直循环。参考如下:
var year=function (){
while(true){
var years=prompt("请输入出生年份:");
years = parseInt(years);
if (!(years > 0 && years <= 9999)) {
alert("请输入0-9999之间的年份!");
}else{
return years;
}
}
};其它函数修改方式相同。如果解决了您的问题,请采纳。祝学习愉快!
相似问题
回答 1