老师好,输错时,有弹出警示框,但是值没有改变,怎么才能赋给变量正确的值?
来源: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