Donnez vie à vos documents numériques !
 

Validation immédiate d’un champ texte

abracadabraPDF Forums PDF – Général Validation immédiate d’un champ texte

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45458
    bebarth
    Maître des clés

    bonjour,
    J’ai un champ texte qui n’accepte que les chiffre et le point ainsi qu’un bouton pour une action. Jusque là tout va bien…
    Lorsque le champ est validé (par touche enter ou tabulation) et qu’on lance l’action, tout est OK.
    Le problème est si on appuie sur le bouton sans avoir validé… pour l’instant j’ai trouvé une parade en changeant de page en début de script de l’action puis en revenant sur la page, mais je suis certain qu’il y a…. je ne dirai pas plus simple, mais plutôt plus logique !!!
    J’ai essayé quelques fonction comme event.willCommit ou plutôt !event.willCommit, commitKey, event.change, event.changeEx, mais maintenant plus je réfléchi et plus j’ai l’impression de pas comprendre ces évènements…
    si quelqu’un maitrise les évènements et qu’il a une solution, je suis preneur (les explications seraient aussi les bienvenues…).
    merci d’avance.
    :Euuuh:

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

    Bonjour.

    Le problème ce ne sont pas les fonctions (que tu comprends certainement très bien), c’est leur enchainement : le script qui contrôle la saisie devrait agir avant, pour interdire la saisie au lieu de la contrôler a posteriori.
    C’est-à-dire qu’il faudrait le placer en script de touches perso.

    Par-exemple pour n’autoriser QUE la saisie de chiffres* j’utilise ce script en script de touches perso :

    Code:
    if(!event.willCommit) {
    if(event.change.charCodeAt(0)>57|event.change.charCodeAt(0)<48)
        {
        app.beep(0);
        event.rc=false;
      }
        }

    L’ordre d’exécution des évènements est expliqué sur cette page (avec un schéma qui-vaut-mieux-qu’un-long-discours) :

    http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/lordre-dexecution-des-evenements-dans-les-champs-de-formulaire-pdf/

    evenements-1.png

    * Si on regarde bien le shéma on voit que l’utilisation du format Nombre proposé par Acrobat ne revient pas au même…

    #60972
    bebarth
    Maître des clés

    Merci Merlin,

    J’avais mis en script de touches personnalisé :
    var regxp=/^[0-9.]$/;
    if (event.willCommit==false)
    {
    if (event.change.length>0 && regxp.test(event.change)==false)

    Maintenant, j’ai combiné les 2 scripts et cela fonctionne.

    1) Y a-t-il une “meilleure” solution pour limiter les caractères entre celle que j’ai utilisée (regex) et celle que tu as proposée (caractères ascii) ?
    2) Je ne comprends pas la différence entre :
        if (event.willCommit==false)
        et
        if (!event.willCommit)
    A un point d’exclamation près, j’y étais presque… :geek: En tout cas merci pour la solution.
    @+
    :bravo: :bonjour:

    #60973
    Merlin
    Maître des clés

    1) Y a-t-il une “meilleure” solution pour limiter les caractères entre celle que j’ai utilisée (regex) et celle que tu as proposée (caractères ascii) ?

    C’est pareil, la différence c’est que les Regex ne sont possible que depuis la version 6 ou 7 d’Acrobat (de mémoire…), alors que l’Ascii fonctionne depuis toujours.
    Mais aujourd’hui ça n’est plus un vrai problème.

    2) Je ne comprends pas la différence entre :
        if (event.willCommit==false)
        et
        if (!event.willCommit)
    A un point d’exclamation près, j’y étais presque…

    C’est pareil, il n’y a pas de différence : c’est le point d’exclamation qui fait tout le boulot.
    Placé devant, il inverse la proposition qui suit.
    Donc :

    if (event.willCommit) = if (event.willCommit == true) = if (!event.willCommit == false) = si l’évènement utilisateur a lieu.
    if (!event.willCommit) = if (event.willCommit == false) = if (event.willCommit != true) = si l’évènement utilisateur n’a pas lieu (champ désactivé sans qu’il n’y ait ni saisie ni clic).


    if (this.getField(“CHAMP”).readonly”) = if (this.getField(“CHAMP”).readonly” == true) =
    si le champ est visible.
    if (!this.getField(“CHAMP”).readonly”) = if (this.getField(“CHAMP”).readonly” == false) = si le champ n’est pas visible.

    Avec les valeurs boléennes c’est facile, et avec d’autres ça peut être très pratique : pour les cases-à-cocher (ou les boutons-radio), par exemple, dont la seule valeur certaine et connue est celle qui est renvoyé quand elle n’est pas cochée : Off

    if (this.getField(“casAcocher”) == “Off”)
    ou
    if (this.getField(“casAcocher”) != “Off”)

    est plus simple que de tester toutes les valeurs possibles (s’il y a plusieurs cases ou boutons).

    #60974
    bebarth
    Maître des clés

    merci Merlin pour ces explications.
    C’est bien ce que je pensais, mais j’ai juste changé if (event.willCommit == false) en if (!event.willCommit) pour que ça marche alors qu’apparemment c’est pareil !!!
    Le principal, c’est que ça fonctionne et la prochaine fois je ferai différents essais.
    @+
    :bonjour:

    #60975
    Merlin
    Maître des clés

    En fait j’ai mis le signe égal entre les différentes expressions mais il faudrait plutôt mettre une équivalence, car parfois ça n’est pas tout à fait exactement la même chose.
    Un peu comme entre le zéro et rien : des fois c’est pareil mais des fois ça change tout, ça dépend si on fait des additions ou des moyennes…
    :Smiley03:

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