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 :

Vérifications sur onsubmit


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut Vérifications sur onsubmit
    Bonsoir à tous,

    Ayant modifié sur mon livre d'or la partie du onsubmit j'ai perdu la vérification de mes deux caractères, voici mon code :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <form method=post action=writeguest.php 
     onsubmit="return ValidBotBoot(); if ( this.nom.value.length < 2 ) { return false ;}  " >

    le return Validbotboot ce fait bien mais plus la vérification du nombre de caractères avant l'envoi.
    J'ai donc essayé de modifier comme ceci :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <form method="post" action="writeguest.php"
     onsubmit="return (ValidBotBoot()&& 'if ( this.nom.value.length < 2 ) { return false ;}')  " >

    Pourriez-vous me dire où j'ai faux !
    Par avance merci

    Cordialement scoubi

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    A partir du moment où tu fais un return, les instructions suivantes ne sont pas interprétées...

    EDIT
    Quant à la deuxième syntaxe...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Merci à vous Mr Bovino pour avoir modifié mon titre je ne savais pas quoi mettre comme balise

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    faudrait-il dans ce cas le mettre avant le return ?
    Comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <form method=post action=writeguest.php 
     onSubmit=" if ( this.nom.value.length < 2 ) { return false ;} ; return ValidBotBoot();" >
    ou une solution alternative me permettant de conserver la vérification du nombre de caractères et la validation de la fonction Valibotboot ?
    Merci par avance pour cette réponse

    Cordialement scoubi

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu peux garder ton && logique, mais en le rectifiant...
    Dans ce que tu montres, tu fais un && entre le résultat d'une fonction et une chaine de caractère. Or l'équivalent booléen d'une chaine de caractères non vide est toujours true, surtout, le if ne sert à rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onsubmit="return (ValidBotBoot()&& this.nom.value.length > 1)"
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    je comprend mais il n'est plus nécessaire dans ce cas de faire un return false ?

    Si non je pensais écrire cette condition dans une fonction et l'appeler comme ma fonction ValidBotBoot ? mais le premier return annule t'il les suivants ?
    Après test cela ne fonction pas car si je n'écris rien dans mes champs le message ce poste quand même

    Merci

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Le résultat d'un && logique est obligatoirement un booléen...
    Donc quand tu fais un &&, tu renvoies toujours true ou false.
    Quant à externaliser ton test, c'est exactement pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onsubmit="return fonction1() && fonction2()"
    Enfin, oui, c'est le but de l'instruction return de stopper l'exécution d'une fonction et de renvoyer le résultat passé en opérande.
    Encore faut-il comprendre qu'un attribut d'événement HTML comme onsubmit crée en fait une fonction anonyme dont le code est celui passé en valeur de l'attribut.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Si j'ai bien compris la réponse, même si je crée une fonction cela ne fonctionnera pas en utilisant par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onsubmit="return ValidBotBoot()&& verif()"
    avec par exemple pour verif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <script type="text/javascript">
     
     function verif(){
    if this.nom.value.length <  2
    { return false ;}
    }
     
     </script>

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    ça marche pas snif

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    ça marche pas snif
    voilà quelque chose de hautement instructif

    Pose toi quand même la question de ce que vaut this dans ta fonction.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Bonsoir NoSmoking,

    si le champs nom est inferieur à 2 le résultat est " false "

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Je vais passer par l'instruction getElementById

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    function verif(){
        if(document.getElementById('nom').value == ""){
            alert ('Vous avez oublié de saisir votre nom!');
            return false;
        }
    	return true;
    }

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Certes c'est ce que tu souhaites, mais même en y pensant très fort le this fait référence à l'objet window donc ce n'est pas ce que tu cherches donc ...(voir le PS après relecture)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function verif(){
      var oElem = document.getElementById('id_du_champ_a_tester');
      if( oElem.value.length <  2){
        return false ;
      }
      else{
        return true;
      }
    }
    voilà la bonne syntaxe, non simplifiée, en mettant les parenthèses qui vont bien.

    PS: je pense d'ailleurs que this.nom doit pointer quand même sur le bon élément même si cette syntaxe me pique les yeux.

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     function verif(){
    if this.nom.value.length <  2
    { return false ;}
    }


    C'est quoi cette syntaxe pour le if ?

    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     function verif(){
    return document.getElementById('id_du_champ_a_tester').value.length > 1;
    }
    me semble amplement suffisant...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Et bien cela ne fonctionne pas, pourtant j'ai bien l'id nom comme cela :

    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
    <tr><td><FONT FACE="monotype corsiva" size="4"  color="white">Nom :</FONT></td>
        <td><input type=text name="nom" id="nom" size=25 ></td></tr>
     
     <script type="text/javascript">
     
    function verif(){
      var oElem = document.getElementById("nom");
      if( oElem.value.length <  2){
        return false ;
      }
      else{
        return true;
      }
    }
     
     </script>
    <form method="post" action="writeguest.php"
     onsubmit="return ValidBotBoot()&& verif()">
    même si le champ nom est vide le message ce poste !!!

    je suis attaqué par un robo spameur qui malgré une case à cocher en jquery ( fonctionnelle ) et une addition aléatoire en javascript à compléter, un champ vide caché, ce robot arrive à me poster des cochonneries !
    je ne sais plus quoi faire pour éviter cela !

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Points : 78
    Points
    78
    Par défaut
    Je vais changer de concept, vue que le dernier robot spammeur utilise toujours la même adresse mail
    je pense interdire l'envoi du message si dans le champ form1 la fameuse adresse email est remplie

    J'ai donc pensé à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function valider()
    if(document.form1.Mail.value == "@exemple.fr")
      return false;
    Sauf que au lieu de bloquer l'envoi, j'ai simplement l'adresse qui est effacée, voir toutes les adresse même, mais le message est posté

  17. #17
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return document.form1.Mail.indexOf("@exemple.fr")<0; // return false si contenue donc pas de soumission du formulaire
    autant bloquer coté serveur.

Discussions similaires

  1. [débutant] vérification formulaire onSubmit
    Par CKLN00 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/05/2008, 14h45
  2. Vérification sur un String
    Par L4BiN dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 25/10/2007, 15h13
  3. Réponses: 1
    Dernier message: 16/07/2007, 20h03
  4. Contrainte de vérification sur champ DATE
    Par Toshtuk dans le forum Oracle
    Réponses: 12
    Dernier message: 15/09/2006, 11h47
  5. [POO] Code sur onSubmit
    Par Ricou13 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/07/2006, 17h17

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