2017-05-30 2 views
0

J'essaie d'utiliser une instruction try-catch-finally pour vérifier les erreurs de l'utilisateur, puis passer à la page suivante s'il n'y a pas d'erreur (je sais qu'il y a des moyens plus faciles de le faire mais je suis obligé d'utiliser un try-catch-finally). Dans ce cas: foo est l'entrée de l'utilisateur, l'entrée doit être un nombre entre 0 et 100, et displayDiagram() fera avancer l'utilisateur à la page suivante.En utilisant une instruction else-if avec un try-catch-finally

Tout fonctionne pour moi jusqu'au blocage final. Si l'utilisateur n'entre rien, il passe à la diapositive suivante. Comment puis-je l'empêcher d'avancer si rien n'a été entré?

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

Un autre bloc, j'ai enfin essayé comprend:

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

Toutes les idées? Merci!

+2

indice: opérateur d'affectation vs comparaison. '=' vs '==' – ippi

+2

indice 2: erreur est seulement * visible * dans 'catch' - donc' == 'ne pas résoudre le problème sous-jacent –

+0

en fait, je pense que le code dans la question a une faute de frappe, parce que' if (err = undefined) 'would ** never ** true et lancerait probablement une erreur - donc' displayDiagram' ne serait jamais ** exécuté **. la seule façon de l'exécuter est s'il y avait un 'var err' qui n'était pas défini ** et ** le code utilisé' == 'au lieu de' = '- dans ce cas' displayDiagram' serait ** toujours ** exécuté quoi que ce soit –

Répondre

0

Vous n'avez pas besoin enfin du tout

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

Merci Jaromanda! Le code ci-dessus ne fonctionnait pas si quelqu'un utilisait un espace vide ou une série d'espaces vides, donc j'ai ajouté ceci avant la première instruction if. Maintenant cela fonctionne: 'preScore = preScore.replace (/ \ s/g," "); // supprime les espaces – somerandomstudent