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;
        }
    }
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top