IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Récupérer la valeur retournée par l'exécution d'une méthode contenue dans un attribut


Sujet :

JavaScript

  1. #1
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut Récupérer la valeur retournée par l'exécution d'une méthode contenue dans un attribut
    Bonjour,

    Désolé pour le titre de la discussion, je n'ai pas trouvé mieux

    Sur ma page HTML, j'ai un formulaire qui contient des champs (input, ou select) dont certains disposent de l'appel de fonctions Javascript sur l'attribut onblur.
    Il s'agit en fait de fonctions de validation (j'en ai une dizaine de différentes).
    Par exemple, je vais avoir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input ... onblur="checkRequired(this, ...);"/>
    <input ... onblur="checkMinLength(this, ...);"/>
    ...
    Ces méthodes de validation retournent un booléen, indiquant si le champ est valide ou pas.
    Ceci fonctionne très bien, à partir du moment où l'utilisateur entre dans tous les champs qui ont des validations.

    Ce que je voudrais avoir maintenant, c'est une sorte de validation "globale" quand l'utilisateur clique sur le bouton Submit du formulaire. J'entends par là que dès qu'il clique sur le bouton Submit, une fonction Javascript va exécuter toutes les fonctions de validation, et ne soumettre le formulaire au serveur si et seulement si toutes les validations sont bonnes.
    J'ai presque réussi à faire cela avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function checkAllFields(button) {
        var form = button.form;
        if (form) {
            for (var x = 0; x &lt; form.elements.length; x++) {
                var field = form.elements[x];
                // J'ai zappé quelques tests ici pour vérifier le type de champ.
                if (field.onblur) {
                    field.onblur();
                }
            }
        }
    }
    Ca fonctionne, mais le souci c'est que si l'un des champs n'est pas valide, le formulaire est quand même soumis.
    Pour résoudre cela, il faudrait que ma fonction checkAllFields retourne un booléen qui vaut vrai si tous les champs sont valides, et faux sinon.
    Le problème, c'est que je n'arrive pas à récupérer la valeur retournée par l'évaluation de la fonction contenue dans l'attribut onblur de mon champ.

    Comment puis-je faire cela ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    passe par une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function checkAllFields(button) {
    var blnCheckAll = true;
        var form = button.form;
        if (form) {
            for (var x = 0; x < form.elements.length && blnCheckAll; x++) {
                var field = form.elements[x];
                // J'ai zappé quelques tests ici pour vérifier le type de champ.
                if (field.onblur) {
                    blnCheckAll = field.onblur();
                }
            }
        }
    return blnCheckAll;
    }
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="..." onsubmit="return checkAllFields(ton_button);">
    Le contrôle s'arrêtera à la 1° erreur (sinon c'est plus compliqué : stocker dans un tableau toutes les erreurs rencontrés pour les signaler en fin de controle).
    Remarques :
    attention aux syntaxe obsolètes
    "form" est un mot réservé du langage : très mauvais choix pour un nom de variable

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    la validation sur le blur de chaque champ c'est un peu lourd et peu ergonomique ...

    Pourquoi ne fais tu pas une fonction globlae de validation decelenchée sur le onsubmit de ton form

    un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <script type='text/javascript'>
    function verif(){
    var ok=0;
     
    ok+=(document.forms['monform'].elements['one'].value.length==0)?1:0;
    ok+=(document.forms['monform'].elements['two'].value.length==0)?1:0;
     
    if(ok>0){alert('je ne valide pas');}
     
    return ok<1;
    }
    </script>
    </head>
     
    <body>
    <form id="monform" onsubmit='return verif()' action="javascript:alert('je valide')">
    <input type='text' id='one' name='one'/>
    <input type='text' id='two' name='two'/>
    <input type='submit' value='valider' />
    </form>
    </body>
     
    </html>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    [quote=E.Bzz;2553573]
    passe par une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
        blnCheckAll = field.onblur();
    ...
    J'y avais pensé. Le problème c'est que field.onblur() me retourne une valeur undefined, et non le booléen que je recherche !

    Citation Envoyé par E.Bzz Voir le message
    attention aux syntaxe obsolètes
    "form" est un mot réservé du langage : très mauvais choix pour un nom de variable
    Ok, ça c'est changé
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    la validation sur le blur de chaque champ c'est un peu lourd et peu ergonomique ...

    Pourquoi ne fais tu pas une fonction globlae de validation decelenchée sur le onsubmit de ton form
    Merci pour ta proposition, mais hélas elle ne me va pas.
    Je dois en effet proposer une validation à la sortie d'un champ, c'est ce qui m'est demandé D'où l'obligation du onblur.

    Pour information, mes méthodes de validation ne sont pas trop intrusives, c'est-à-dire que si l'utilisateur saisit une valeur invalide, je ne vais pas lui plaquer une alert Javascript devant les yeux. Je vais "juste" mettre le bord du champ en rouge, avec une petite icone, ainsi qu'un message de type tooltip indiquant la nature de l'erreur.
    De plus, seule une partie des champs sont soumis à validation, et non tous !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    oui alors une variable globale qui est modifiée à chaque onblur puis testée dans le onsubmit du form
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    J'y avais pensé. Le problème c'est que field.onblur() me retourne une valeur undefined, et non le booléen que je recherche !
    Alors il faudrait commencer par corriger ça
    Code de la fonction ?

    Citation Envoyé par romaintaz Voir le message
    Je dois en effet proposer une validation à la sortie d'un champ, c'est ce qui m'est demandé D'où l'obligation du onblur.
    "Obligation", non !
    onchange serait plus judicieux

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    oui alors une variable globale qui est modifiée à chaque onblur puis testée dans le onsubmit du form
    Pas la peine qu'elle soit globale (ça oblige à la gérer), puisque c'est la fonction qui boucle sur les tests ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    si elle n'est pas globale je ne vois pas comment elle pourrait être accessible dasn le onsubmit ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    si elle n'est pas globale je ne vois pas comment elle pourrait être accessible dasn le onsubmit ???
    Ben ... classique : cf. #2

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Ok Ebzz mais seulement dans le cas d'une focntion générique pour la vérfication de tous les éléments à renseigner sur le form...
    Quid si en focntion du type d'element input; check, radio, select, tu as une fonction de verification dédiée ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Alors il faudrait commencer par corriger ça
    Code de la fonction ?

    "Obligation", non !
    onchange serait plus judicieux

    A+
    Le onchange serait plus judicieux, sans doute, mais voici un cas qui ne sera pas pris en compte par le onchange :
    J'ai un champ dont la fonction de validation est checkRequired. Cette validation échoue si le champ est vide. Admettons que l'utilisateur, par l'appui de TAB, passe par ce champ, mais n'y remplit rien. Il appuie à nouveau sur TAB, quitte donc ce champ. onchange n'est pas appelé (le champ n'a pas été modifié), mais onblur si. Maintenant, pour mes autres types de validations, je pourrais en effet utiliser le onchange pour toutes les autres validations, et garder le onblur pour mon checkRequired.

    Sinon, tu veux le code de quelle fonction ? La fonction checkRequired par exemple ?
    La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    function checkRequired(field, message, icon) {
        var isValid = true;
        if (field == null || field.disabled) {
            return true;
        }
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'file' ||
            field.type == 'select-one' ||
            field.type == 'radio' ||
            field.type == 'password') {
            var value = '';
              // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
              } else {
                value = field.value;
              }
            if (trim(value).length == 0) {
            isValid = false;
            }
        }
        if (!isValid) {
            displayAlarm(field, message, icon);
        }
        return isValid;
    }
    La fonction displayAlarm ne fait qu'afficher les "alertes" à l'utilisateur, et ne retourne rien.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Sinon, tu veux le code de quelle fonction ?
    Celle qui, sur le onblur, ne te retourne pas le booléen souhaité ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Quid si en focntion du type d'element input; check, radio, select, tu as une fonction de verification dédiée ...
    Dans la mesure où c'est celle appelée sur le onblur de l'élément qui est rappelée (pas vérifié la syntaxe, par contre, mais ça semble fonctionner), on peut la considérer comme "générique", même si ce sont des fonctions utilisateur différentes qui s'éxécutent au final, non ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  15. #15
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Dans ma page HTML, j'ai mon input :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input ... onblur="checkRequired(this,  'This field is required.', 'images/warning.gif');" onclick="hideAlarm(this);" />
    Bon, j'ai eu l'illumination en écrivant mon explication. Il me suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input ... onblur="return checkRequired(this,  'This field is required.', 'images/warning.gif');" onclick="hideAlarm(this);" />
    Avec ça, ça marche !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  16. #16
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Celle qui, sur le onblur, ne te retourne pas le booléen souhaité ...

    A+
    Merci pour avoir préciser ta pensée, c'est comme ça que j'ai trouvé ma solution!
    Merci à tous les deux pour votre aide.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Afficher la valeur retournée par un exécutable
    Par kevin01330 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 03/07/2013, 18h01
  2. Réponses: 1
    Dernier message: 08/09/2009, 14h40
  3. Récupérer la valeur retourné par prompt dans C#
    Par hassine dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 31/03/2009, 11h41
  4. Réponses: 3
    Dernier message: 12/06/2008, 19h36
  5. Réponses: 1
    Dernier message: 31/07/2006, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo