Javascript: la fonction onSubmit soumet le formulaire avant la fin de la fonction?
-
28-10-2019 - |
Question
Je pose cette question car je suis moi-même complètement perdu et j'ai besoin d'une nouvelle paire d'yeux.
La fonction JavaScript suivante est appelée avec succès lors de la soumission du formulaire HTML connecté.La fonction démarre et les deux premières instructions if
s'exécutent (et interrompent la soumission si elles renvoient false
).
Ensuite, le premier test alert
"before" apparaît, puis le formulaire se soumet, manquant complètement le reste de la fonction.Pendant le test, j'ai changé la dernière ligne pour renvoyer false
afin que quoi qu'il arrive, la fonction renvoie false
, mais le formulaire est toujours soumis.
function validateForm(form)
{
// declare variables linked to the form
var _isbn = auto.isbn.value;
var _idisplay = auto.isbn.title;
var _iref = "1234567890X";
// call empty string function
if (EmptyString(_isbn,_idisplay)==false) return false;
// call check against reference function
if (AgainstRef(_isbn,_iref,_idisplay)==false) return false;
// call check length function
alert("before");///test alert
////// FORM SUBMITS HERE?!? /////////////
if (AutoLength(_isbn)==false) return false;
alert("after");///test alert
// if all conditions have been met allow the form to be submitted
return true;
}
Edit: voici à quoi ressemble AutoLength
:
function AutoLength(_isbn) {
if (_isbn.length == 13) {
return true; {
else {
if (_isbn.length == 10) {
return true; {
else {
alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
return false;
}
}
La solution
Il y a des erreurs dans votre implémentation de AutoLength
.Actuellement, cela ressemble à ceci:
function AutoLength(_isbn) {
if (_isbn.length == 13) {
return true; { // <------ incorrect brace
else {
if (_isbn.length == 10) {
return true; { // <------ incorrect brace
else {
alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
return false;
}
}
Vous voyez comment il ne ferme pas tous ses blocs?C'est parce que vous avez utilisé la mauvaise accolade à deux endroits et que vous avez oublié de fermer la fonction.
Vous pouvez réécrire la fonction comme ceci:
function AutoLength(_isbn) {
return _isbn.length === 13 || _isbn.length === 10;
}
Si vous êtes déterminé à utiliser alert
, vous pouvez le faire à l'intérieur de validateForm
(même si j'essaierais de trouver un moyen plus convivial d'afficher le message d'erreur).
À l'avenir, lorsque vous essayez de déboguer du code, vous pouvez utiliser try
et catch
pour "attraper" Errors
au fur et à mesure, comme ceci:
try {
if (false === AutoLength(_isbn)) {
return false;
}
} catch (e) {
alert('AutoLength threw an error: '+e.message);
}
Autres conseils
Si l'exécution de la fonction se termine par une erreur d'exécution, le formulaire se soumet.Consultez donc le journal de la console de script pour les messages d'erreur.