老师好,输错时,有弹出警示框,但是值没有改变,怎么才能赋给变量正确的值?

来源: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回答

好帮手慕查理

2019-01-07

您好,例如此处:在返回年份之前输出一下月份,可以发现在输入错误年份后再输入正确年份,可以输出弹出框,也可以输出正确年份,但最后还是会把之前错误数值时产生的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;
           }
    }
 };

其它函数修改方式相同。如果解决了您的问题,请采纳。祝学习愉快!

0

0 学习 · 4928 问题

查看课程