Donnez vie à vos documents numériques !
 

Vérification des champs obligatoires avant envoi d’un formulaire. – RÉSOLU

abracadabraPDF Forums PDF – Général Vérification des champs obligatoires avant envoi d’un formulaire. – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44444
    jsamica
    Membre

    Bonjour à tous,

    Désolé je relance ce sujet après plusieurs posts existant mais je n’ai pas trouvé mon bonheur.  :doute:

    Je n’arrive pas à trouver plus de détails sur un exemple de script, sur le blocage de l’envoi d’un formulaire PDF.
    En effet par le biais d’un bouton d’envoi avec la fonction this.mailDoc… j’envoie donc mon formulaire rempli, en pièce jointe dans un mail.
    Cependant je souhaite qu’avant l’envoi du form, il y est une vérification des champs obligatoires prévenant l’utilisateur, si celui ci ne les a pas tous remplis lorsqu’il clique sur le bouton d’envoi.

    Je sais qu’à priori il faut utiliser la fonction this.submitform pour vérifier si les champs obligatoires sont remplis.

    Dans la doc Adobe js, d’après ce que j’ai compris c’est que cette fonction n’est applicable uniquement pour alimenter une bdd.

    J’ai donc du mal à comprendre, comment utilisée cette fonction, et l’adapté à mon besoin.
    Quelqu’un aurait un exemple, ou de plus amples explications ?

    Merci.
    :Smiley03:

Affichage de 26 réponses de 1 à 26 (sur un total de 26)
  • Auteur
    Réponses
  • #54668
    Merlin
    Maître des clés

    Salut,

    As tu déjà épluché cet exemple ?
    http://abracadabrapdf.net/articles.php?lng=fr&pg=72

    #54669
    jsamica
    Membre

    Salut Merlin,
    Oui j’ai épluché ton fichier, merci pour la piqure de rappel, ça fait toujours du bien !

    J’ai quand même quelques interrogations, pour que il y ait une validation de champs si j’ai bien compris:
    – il faut envoyer le fichier au format fdf par le biais de l’interface “envoyer un formulaire” ?
    – Si je souhaite envoyer l’intégralité du fichier au format pdf, cela n’est pas réalisable fonctionnellement ?

    De plus dans mon test malgré avoir renseignements les champs obligatoires (définit dans la fenêtre envoyer les sélections du formulaire, et sélectionné les champs…) j’ai ce message suivant: Objet spécifications du fichier incorrect.

    Merci pour ces précisions
    :bonjour:

    #54670
    jsamica
    Membre

    Bonjour à tous,
    Alors pas de solutions ??

    Sinon, y a pas de possibilité de contourner le problème ?  :priere:
    Du genre, je concatène les valeurs des champs dit obligatoires dans un champ, si une des valeurs est vide, je cache le bouton d’envoi ?  :doute:

    Merci
    :bonjour:

    #54671
    Merlin
    Maître des clés

    – il faut envoyer le fichier au format fdf par le biais de l’interface “envoyer un formulaire” ?
    – Si je souhaite envoyer l’intégralité du fichier au format pdf, cela n’est pas réalisable fonctionnellement ?

    Exemple ci-joint, ça fonctionne dans les deux cas.
    (Les champs À et Objet sont obligatoires)

    :Smiley01:

    [attachment deleted by admin]

    #54672
    jsamica
    Membre

    Salut Merlin
    merci, effectivement comme ça, sa fonctionne !
    Par contre comment sa marche pour une adresse mail variable ?

    Sinon je vais continuer me creuser la tête sur script avec la super doc js !!
    Si par bonheur je trouve un truc, je ne manquerai d’en faire profiter tous nos amis du forum !
    :geek:

    :bonjour:

    #54673
    Merlin
    Maître des clés

    Par contre comment sa marche pour une adresse mail variable ?

    Bonne question…
    Fais voir un exemple.
    :Smiley03:

    #54674
    jsamica
    Membre

    re,
    Je t’es envoyé l’exemple en mp (pour des raisons de temps et d’anonymat)
    Au besoin merci me solliciter si quelqu’un souhaite avoir un exemple

    :joker:

    #54675
    Merlin
    Maître des clés

    J’ai mis le temps à bien comprendre ton problème et je suis stupéfait de constater que dès qu’on n’utilise pas la fonction Submit de base les champs obligatoires ne sont pas vérifiés, même pas en option…
    :mur:

    J’ai trouvé divers sujets (ci-joints) sur la question avec différentes façon d’aborder le problème. (Ce sont des captures car soit les sujets soit les forums n’existent plus ou ont été modifiés.)
    J’ai fait un exemple à partir du formulaire de contact cité ci-dessus en utilisant la méthode d’Alex (voir son exemple ci-joint : check required fields before print.pdf), c’est celle que je préfère car elle relève plus d’une mise en œuvre dans un vrai processus de production que de l’astuce de forum brute de décoffrage.

    D’autre part son principe est simple : plutôt que d’utiliser un long script compliqué* avec des si et des conditions il utilise un script de vérification en action souris-entrée qui affiche une alerte si un champ obligatoire n’est pas rempli.
    Dans l’exemple ci-joint (FormContact_obligatoire.pdf) je n’ai eu qu’à rajouter le script en action souris-entrée dans les boutons d’envoi (et à modifier le nom des champs).

    Dès que l’alerte est affichée, le bouton n’est plus utilisable tant que l’utilisateur n’a pas cliqué OK dans l’alerte, et donc le bouton ne peut pas déclencher le script d’envoi placé en action souris-relachée. Et ça recommence inlassablement tant que tout n’est pas rempli correctement.

    Après que l’utilisateur clique OK le focus (le curseur) se place dans le champ concerné, on pourrait facilement y ajouter un contour rouge, etc.
    Dans cet exemple le script limite la quantité de champs obligatoires possibles à 11 pour optimiser sa vitesse d’exécution, mais ce n’est qu’un chiffre à modifier dans le code.

    C’est très souple à utiliser parce-que c’est le préfixe du nom du champ qui détermine son caractère obligatoire, et non pas la Propriété du même nom (tant qu’à faire ignorons là jusqu’au bout…).
    Et c’est très “user-friendly” parce-que c’est le texte contenu dans l’info-bulle qui apparait comme nom de champ dans l’alerte affichée à l’utilisateur, ce qui permet d’utiliser une désignation plus pertinente que le vrai nom du champ (t.champ.zorglub.3) puisqu’on a droit à tous les caractères (256 maxi).

    C’est aussi très facile à utiliser (voir l’exemple d’Alex) avec un bouton “Imprimer”, “Enregistrer”, etc.

    :Smiley15:

    * Il y a des exemples de scripts ultra-simples ci-joints, mais plus il est simple moins on a de maîtrise sur l’alerte utilisateur, le nom du champ, ce que se passe ensuite, etc.

    [attachment deleted by admin]

    #54676
    jsamica
    Membre

    Salut Merlin,
    Mille merci    :bravo:  :Smiley00:

    Eh oui effectivement tu viens de voir pkoi je  :mur:

    Je regarde tt ça, mais en cas c super
    encore merci

    :Smiley03:

    #54677
    jsamica
    Membre

    Salut tt le monde,
    Suite aux retours de Merlin, voici mon code

    Code:
    var RequiredFields = new Array(7);
    RequiredFields[0] = “date”;
    RequiredFields[1] = “nom”;
    RequiredFields[2] = “agence”;
    RequiredFields[3] = “mail”;
    RequiredFields[4] = “duree”;
    RequiredFields[5] = “naf”;
    RequiredFields[6] = “siret”;

    var AlertMsg = new Array(7);
    AlertMsg[0] = “Veuillez remplir le champ Date”;
    AlertMsg[1] = “Veuillez remplir le champ Nom”;
    AlertMsg[2] = “Veuillez remplir le champ Agence”;
    AlertMsg[3] = “Veuillez remplir le champ Adresse Mail”;
    AlertMsg[4] = “Veuillez remplir le champ Durée du contrat”;
    AlertMsg[5] = “Veuillez remplir le champ Code NAF”;
    AlertMsg[6] = “Veuillez remplir le champ Code SIRET”;

    var bSuccess=true
    var emptyTest=/^s*$/;
    var fieldCount=RequiredFields.length
    var fld=0;
    for(var i=0;i{
    fld=this.getField(RequiredFields);
    if(emptyTest.test(fld.value))
    {
    bSuccess=false;
    app.alert(AlertMsg);
    fld.setFocus();
    break;
    }
    }

    if(bSuccess=true);
    var fTo = this.getField(“adresse”);
    var fSubject = this.getField(“concatobjet”);
    var fBody = this.getField(“concat”);
    this.mailDoc(true, fTo.value, “”, “”, fSubject.value, fBody.value);

    Il fonctionne plutôt bien, un message indique si un champ n’est pas rempli, cependant après avoir cliqué sur ok dans la fenêtre, il ouvre quand même un mail pour envoi. (ci joint un exemple)
    Autre dysfonctionnement si rien n’est rentré il indique que le premier champs est vide, mais pareil lance la fenetre mailDoc

    Qui à une idée, pour ajouter un bout de code permettant de bloquer l’ouverture du mailDoc si un champs n’est pas rempli ?

    Merci
    :bonjour:

    [attachment deleted by admin]

    #54678
    Merlin
    Maître des clés

    C’est l’instruction break; qui n’a pas l’air de fonctionner, mais on s’en fiche : même principe que ci-dessus, j’ai découpé le script entre l’action Souris-entrée et l’action Souris-enfoncée
    Javapa me compliquer la vie !

    Exemple ci-joint.
    :Smiley03:

    [attachment deleted by admin]

    #54679
    jsamica
    Membre

    Salut Merlin,
    Super merci, cependant juste un petit problème que je retrouvais aussi dans tes exemples.
    Le fenêtre d’avertissement “veuillez remplir le champs…” s’affiche en boucle ! c’est quasi inutilisable
    :Smiley02:

    Allez je regarde de mon coté, on est sur le bon chemin !  :extra:
    :priere:

    :Smiley03:

    #54680
    Merlin
    Maître des clés

    Disons que cette méthode impose d’utiliser un bouton plus petit et judicieusement placé à l’autre bout de la page…
    :geek:

    #54681
    jsamica
    Membre

    je pense qu’on doit pouvoir l’optimiser quand même ce fichu script.  :oh:

    J’ai vais essayer de voir de mon coté, sinon un développeur Javascript du forum peut-il jeter un oeil ?  :idee:

    Merci.
    :bonjour:

    #54682
    Merlin
    Maître des clés

    En fait c’est juste après break; que ça ne va pas :

    Il y a un problème d’égalité, plus une condition if non suivie d’accolades et immédiatement stoppée (le point-virgule) :

    if(bSuccess=true);
    var fTo = this.getField(“mail”);
    var fSubject = this.getField(“concatobjet”);
    var fBody = this.getField(“concat”);
    this.mailDoc(true, fTo.value, “”, “”, fSubject.value, fBody.value);

    Que j’ai corrigé ainsi :

    if(bSuccess==true) {
    var fTo = this.getField(“mail”);
    var fSubject = this.getField(“concatobjet”);
    var fBody = this.getField(“concat”);
    this.mailDoc(true, fTo.value, “”, “”, fSubject.value, fBody.value);
    }

    Ci-joint.

    :Smiley15:

    [attachment deleted by admin]

    #54683
    jsamica
    Membre

    Yes effectivement c’était bien ça !!
    ça marche super maintenant.  :bravo:  :extra:

    Mille merci
    :geek:

    #54684
    alex
    Participant

    Pour les paresseux (comme moi) le script ci-dessous liste lui-même les champs obligatoires, fait le même test que vous et envoie les données

    console.clear();
    var bSuccess=true;
    var emptyTest=/^s*$/;
    for(var i=0;i {
    nameField=this.getNthFieldName(i);
    fld=this.getField(nameField);
    if(fld.type==”text”|fld.type==”checkbox”|fld.type==”combobox”)
    {
    if(fld.required)
    {
    console.println(“Analyse champ “+nameField);
    if(emptyTest.test(fld.value))
    {
    bSuccess=false;
    AlertMsg=”Veuillez remplir le champ “”+nameField+”””;
    app.alert(AlertMsg,1);
    fld.setFocus();
    }
    }
    }
    }
    if(bSuccess)
    {
    var fTo = this.getField(“mail”);
    var fSubject = this.getField(“concatobjet”);
    var fBody = this.getField(“concat”);
    this.mailDoc(true, fTo.value, “”, “”, fSubject.value, fBody.value);
    }

    #54685
    Merlin
    Maître des clés

    Adopté !
    :bravo:

    #54686
    jsamica
    Membre

    Salut,
    C’est magnifique  :bravo: !!!!
    grand merci  :extra:

    Je vais tester ça très vite

    :bonjour:

    #54687
    Whatever
    Membre

    Pour les paresseux (comme moi) le script ci-dessous liste lui-même les champs obligatoires, fait le même test que vous et envoie les données

    console.clear();
    var bSuccess=true;
    var emptyTest=/^s*$/;
    for(var i=0;i {
    nameField=this.getNthFieldName(i);
    fld=this.getField(nameField);
    if(fld.type==”text”|fld.type==”checkbox”|fld.type==”combobox”)
    {
    if(fld.required)
    {
    console.println(“Analyse champ “+nameField);
    if(emptyTest.test(fld.value))
    {
    bSuccess=false;
    AlertMsg=”Veuillez remplir le champ “”+nameField+”””;
    app.alert(AlertMsg,1);
    fld.setFocus();
    }
    }
    }
    }
    if(bSuccess)
    {
    var fTo = this.getField(“mail”);
    var fSubject = this.getField(“concatobjet”);
    var fBody = this.getField(“concat”);
    this.mailDoc(true, fTo.value, “”, “”, fSubject.value, fBody.value);
    }

    Bonjour, je suis tombé sur ce site par hasard, mais il y contient beaucoup d’information pertinentes.

    J’ai testé le script ci-dessus et il fonctionne à merveille. Maintenant, est-ce possible d’afficher le “tooltip” plutôt que le nom du champ? Je vous en serait très reconnaissant.

    #54688
    jsamica
    Membre

    Bonjour à tous,

    Ouai effectivement ce serait le cerise sur la gâteau.

    :geek:

    #54689
    Merlin
    Maître des clés

    est-ce possible d’afficher le “tooltip” plutôt que le nom du champ?

    C’est comme ça que fonctionne l’exemple FormContact_obligatoire.pdf que j’ai fourni dans ce message : http://abracadabrapdf.net/forum/index.php/topic,1960.msg10002.html#msg10002

    :bonjour:

    #54690
    club3dtext
    Membre

    Bonjour à vous,

    Je sais que déjà c’est un sujet considéré résolu sur le forum, considérant ce script de vérification de champ ci-dessous, quelqu’un pourait-il me donner un exemple en piece jointe, s’il vous plaît ? Car je n’y arrive pas tout seul.
    Script tiré de cette pièce jointe : display_a_message_if_required_fields_are_blank.pdf

    var requiredFields = new Array();
    // loop through fields
    for (var i = 0; i < this.numFields; i++){
    // test for required field and if there is no value for the field
    var fName = this.getNthFieldName(i);
    if (this.getField(fName).required & this.getField(fName).value == ”){
    // add required field name to array of required field names
    requiredFields[requiredFields.length] = fName;
    }
    }
    var error = “Please complete the following fields: nn”;
    for (j=0; j < requiredFields.length; j++){
    if (requiredFields[j].value == null){
    error = error + requiredFields[j] + ‘n’;
    }
    }
    if (requiredFields.length > 0)
    app.alert(error);

    Merci.

    [attachment deleted by admin]

    #54691
    jsamica
    Membre

    Bonjour Club3dtext,
    Désolé j’ai pas le temps de te concocter un exemple cependant voici un script que j’utilise dans un formulaire et qui fonctionne bien.
    Il se place dans le bouton d’envoi du formulaire

    Code:
    var RequiredFields = new Array(3);
    RequiredFields[0] = “champs1”;
    RequiredFields[1] = “champs2”;
    RequiredFields[2] = “champs3”;

    var AlertMsg = new Array(3);
    AlertMsg[0] = “Veuillez remplir le champ “champs1″”;
    AlertMsg[1] = “Veuillez remplir le champ “champs2 “”;
    AlertMsg[2] = “Veuillez remplir le champ “champs3″”;

    var bSuccess=true;
    var emptyTest=/^s*$/;
    var fieldCount=RequiredFields.length
    var fld=0;
    for(var i=0;i{
    fld=this.getField(RequiredFields);
    if(emptyTest.test(fld.value))
    {
    bSuccess=false;
    app.alert(AlertMsg);
    fld.setFocus();
    break;
    }
    }

    if(bSuccess==true)
    {var fTo = this.getField(“to”);
    var fSubject = this.getField(“objet”);
    var fBody = this.getField(“corps”);
    this.mailDoc(true, fTo.value, “”, “”, fSubject.value, fBody.value);}

    En espérant que cela t’aide
    Bonne continuation  :Smiley03:

    #54692
    club3dtext
    Membre

    Bonjour !  Je tiens à te remercier jsamica pour la réponse rapide, je vais essayer de voir ce que je peux faire et je te dirai le resultat du test. Mais laisse moi te dire pour l’autre code trouvé du fichier display_a_message_if_required_fi elds_are_blank.pdf, si possible essaie de me concocter un exemple en pièce parce que je n’arrive pas à l’interpréter.

    #54693
    jsamica
    Membre

    voici un petit exemple en pj

    Bon courage
    :bonjour:

    [attachment deleted by admin]

Affichage de 26 réponses de 1 à 26 (sur un total de 26)
  • Vous devez être connecté pour répondre à ce sujet.