2017-05-30 4 views
0

Ich versuche eine try-catch-finally-Anweisung zu verwenden, um Benutzereingaben zu überprüfen und dann zur nächsten Seite weiterzugehen, wenn kein Fehler vorliegt (ich weiß, es gibt einfachere Möglichkeiten, dies zu tun, aber ich bin verpflichtet, einen Versuch zu versuchen - Fang-endlich). In diesem Fall: foo ist die Eingabe des Benutzers, die Eingabe muss eine Zahl zwischen 0 und 100 sein, und displayDiagram() bringt den Benutzer zur nächsten Seite.Verwenden Sie eine else-if-Anweisung in einem try-Catch-finally

Alles funktioniert für mich bis zum endgültigen Block. Wenn der Benutzer überhaupt nichts eingibt, wird mit der nächsten Folie fortgefahren. Wie verhindere ich das Vorrücken, wenn nichts eingegeben wurde?

Hier ist der Code:

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(); 
    } 
} 

Ein weiterer ich schließlich enthält versucht haben, Block:

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

? Vielen Dank!

+2

Hinweis: Zuweisungsoperator vs Vergleich. '=' vs '==' – ippi

+2

hinweis 2: err ist nur * sichtbar * in 'catch' - so' == 'nicht reparieren das zugrunde liegende Problem –

+0

in der Tat, ich denke, der Code in der Frage hat einen Tippfehler, weil' If (err = undefined) 'würde ** nie ** wahr sein, und würde wahrscheinlich einen Fehler werfen - so' displayDiagram' würde ** nie ** ausgeführt werden. der einzige Weg, der jemals laufen würde, wäre, wenn es einen 'var err' gab, der undefiniert ** war und ** der verwendete Code' == 'anstelle von' = '- in diesem Fall würde' displayDiagram ** ** immer ** laufen Egal ob –

Antwort

0

Sie brauchen nicht endlich an allen

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

Danke Jaromanda! Der obige Code funktionierte nicht, wenn jemand ein Leerzeichen oder eine Reihe von Leerzeichen verwendete, also fügte ich das vor der ersten if-Anweisung hinzu. Jetzt funktioniert es: 'preScore = preScore.replace (/ \ s/g," "); // lösche Leerzeichen – somerandomstudent

Verwandte Themen