2017-05-30 140 views
0

我想使用try-catch-finally语句错误检查用户输入,然后在没有错误的情况下进入下一页(我知道有更简单的方法来做到这一点,但我被要求使用try-catch-finally)。在这种情况下:foo是用户的输入,输入需要是介于0和100之间的数字,而displayDiagram()会将用户推到下一页。在try-catch-finally中使用else-if语句

一切都适合我,直到finally块。如果用户根本没有输入任何内容,则前进到下一张幻灯片。如果没有输入任何内容,我该如何阻止它前进?

下面的代码:

try { 
     if (foo == "") throw "Enter your estimated score"; 
     if (isNaN(foo)) throw "Only use numbers for your estimated score"; 
     if (foo < 0) throw "Estimated score is not valid. Enter a higher number"; 
     if (foo > 100) throw "Estimated score is too high. Enter a lower number"; 

    } 
    catch(err) { 
    document.getElementById("fooMessage").innerHTML = err; 
    document.getElementById("fooInput").style.borderColor = "red"; 

    } 
    finally { 
    if (err = undefined) { 
    displayDiagram(); 
    } 
} 

另一个finally块我曾尝试包括:

finally { 
     if (preScore >= 0 && preScore <= 100) { 
     displayDiagram(); 
     } else if (typeof preScore != "string") { 
     displayDiagram(); 
     } 
     } 

任何想法?谢谢!

+2

暗示最后需要:赋值运算符VS比较。 '='vs'==' – ippi

+2

提示2:错误只是*可见*在catch内部 - 所以'=='不会修复底层问题 –

+0

事实上,我认为问题中的代码有一个错字,因为'如果(错误=未定义)'会** **永远**是真实的,并可能会抛出一个错误 - 所以'displayDiagram'将** **不会执行。唯一可以运行的方式是,如果有'var err'这个未定义**和**代码使用'=='而不是'=' - 在这种情况下'displayDiagram'会**总是**运行无论什么 –

回答

0

你根本就不

try { 
     if (foo == "") throw "Enter your estimated score"; 
     if (isNaN(foo)) throw "Only use numbers for your estimated score"; 
     if (foo < 0) throw "Estimated score is not valid. Enter a higher number"; 
     if (foo > 100) throw "Estimated score is too high. Enter a lower number"; 
     // any throw above will mean this doesn't get executed 
     displayDiagram(); 

    } 
    catch(err) { 
    document.getElementById("fooMessage").innerHTML = err; 
    document.getElementById("fooInput").style.borderColor = "red"; 

    } 
+0

谢谢Jaromanda!如果有人使用空格或一系列空格,上面的代码不起作用,所以我在第一个if语句之前添加了该代码。现在它可以工作:'preScore = preScore.replace(/ \ s/g,“”); //删除空格“ – somerandomstudent