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 :

Déclenchement conditionnel d'une fonction


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 389
    Points : 214
    Points
    214
    Par défaut Déclenchement conditionnel d'une fonction
    Bonjour,

    J'utilise un script qui rafraîchit une liste déroulante après la saisie dans un formulaire placé dans un pop-up. Pour cela je clique sur un lien (situé dans ma page principale)appelé "Créer un contributeur absent de la liste" : cela m'ouvre un pop-up, je saisis dans le formulaire le nom d'un nouveau contributeur, je valide et la liste des contributeurs se met à jour dans ma page principale (sans rechargement de cette dernière).

    Code de la page pop-up :

    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
    32
    33
    34
    35
    36
    37
    38
     
     
    <script type="text/javascript">
    function doc(nom){
     
    if (document.getElementById)
    {
    return document.getElementById(nom);
    }
    }
    function valid()
    {
    value = doc('value').value;
    text = doc('text').value;
    opener.ajouter('nom', value, text);
    }
     
    </script>
    <title>Popup</title>
    </head>
    <body>
    <?php
    // requete pour chercher le prochain identifiant
    $requete="SELECT MAX(nummetier) AS nb FROM metier WHERE nummetier IN (SELECT nummetier FROM metier) ;";
    $result=mysql_query($requete,$connexion);
    $ligne=mysql_fetch_array($result);
    $value = $ligne['nb'];
    $value = $value + 1;
    ?>
    <form action="" method="POST" onsubmit="valid();">
    <p>
    <?php
    echo '<input type="hidden" name="value" id="value" value="'.$value.'" />';
    ?>
    <br />
    <input type="text" name="text" id="text" />
    <br />
     <input type="submit" value="Ajouter" />
    Code de la page principale :

    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
    32
    33
    34
    35
     
    <script>
    function doc(nom)  {
    if (document.getElementById)  {
    return document.getElementById(nom);
     
    	} 
    		}
     
    function ajouter(nom, value, text)  {
    formulaire = doc(nom);
    // Recuperation des informations
    nb = formulaire.length;
    // On compte le nombre d'<option />
    nouvel_element = new Option(text, value, false, true);
     
    // Creation
    // new Option(text, value, DefaultSelected, Selected);
    // * text = texte affiché dans la liste
    // * value = valeur de la liste à transmettre (facultatif)
    // * defaultSelected = transmettre true quand l'élément doit être l'élément sélectionné par défaut, sinon false (facultatif)
    // * Selected = transmettre true quand l'élément doit être sélectionné (facultatif)
     
    formulaire.options[nb] = nouvel_element;
    // Ajout
    }
    </script>
     
    <form action="update.php" method="POST">
    <p><select name="nom" id="nom"> 
    <option> value="..."</option>
    ...
    </form>
    <!-- ouvrir le popup -->
    <a href="popup.php" onclick="window.open(this.href, 'H', 'width=200, height=200'); return false;">Créer un contributeur absent de la liste</a>
    Le script fonctionne. Dans mon code php, je vérifie que le champ input n'est pas vide de façon à éviter des insertions de données vides dans ma base
    (du style if (empty ($_POST['text']))
    echo "Le champ nouveau contributeur est obligatoire <br/>"; ).

    Le problème c'est qu'en cas de saisie vide dans la champ input, le script JavaScript s'effectue quand même et rapatrie une ligne "option value" vide dans la liste déroulante de ma page principale.
    Comment faire en sorte que le script JavaScript ne se déclenche pas si l'utilisateur valide un champ input vide ? Merci d'avance de votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    faudrait faire la vérification d'abord au niveau du js, et ensuite une double vérification en php, si tu n'as pas le contrôle sur les clients, et de l'activation js.

    Sinon, ton problème est tout simple, il suffit de tester la valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(valeur == "") return;
    Meme si une expression régulière serait plus adapté

    Tu utilises une popup pour ne pas recharger la page, il serait plus intéressant de le faire via AJAX, comme ça tu as le contrôle sur ce que tu envoies , et tu pourra formater la valeur, en enlevant par exemple les espace avant et après

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 389
    Points : 214
    Points
    214
    Par défaut
    Merci Kimjoa pour ta réponse. Mais je suis clairement débutant en JavaScript...
    A quel endroit intégrer ton code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(valeur == "") return;
    Au niveau de la fonction valid() ?

    "valeur" désigne-t-elle la variable php $value ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($value == "") return;
    Merci d'avance pour toute aide complémentaire.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    dans la fonction valid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function valid()
    {
    value = doc('value').value;
    if(value == "")return;
    text = doc('text').value;
    opener.ajouter('nom', value, text);
    }

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 389
    Points : 214
    Points
    214
    Par défaut
    Merci pour ton code, il fonctionne (j'ai juste remplacé l'id en mettant celui du formulaire qui ne doit pas être vide : "text"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function valid()
    {
    value = doc('value').value;
     
    text = doc('text').value;
    if(text == "")return;
     
    opener.ajouter('nom', value, text);
    }
    Je rebondis sur le sujet car j'effectue une seconde vérification dans mon code PHP. La donnée saisie dans le champ input (name "text" dans le code du popup) doit être sous la forme : nom, prénom (soit un délimiteur comportant une virgule + un espace)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $text=trim(mysql_real_escape_string($_POST['text']));				
    $text = explode(", ", $text); 
     
    	if (count($text)==2) { requête...}
     
            else {
     
    echo"format saisie incorrecte";
     
                   }
    Comment m'y prendre pour que le code JavaScript ne s'exécute pas si la saisie de l'utilisateur ne correspond pas au bon format (de même qu'il ne s'exécute pas si le champ est vide à la soumission). Merci de vos avis sur la question.

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    hum; tu pourrais éviter de poster du php pour régler un problème javascript?

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 389
    Points : 214
    Points
    214
    Par défaut
    Au temps pour moi. Je craignais de ne pas bien exposer ma problématique sans extrait du code PHP. J'ai fait différents essais pour arriver au résultat escompté. Je pensais qu'en faisant cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if( ma_condition){//si ma condition est remplie (bon format de saisie)
    ?>
    <script language="JavaScript" type="text/JavaScript">
    ma fonction valid(){
    ...
    }
    </script>
    <?php
    }//fin du if php
    Cela marcherait mais ce n'est pas le cas : le code JavaScript s'exécute toujours même si la saisie de l'utilisateur ne correspond pas au bon format...
    Voyez-vous une solution ? Merci.

Discussions similaires

  1. Combox conditionnelle avec une fonction date
    Par baba59360 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2015, 10h56
  2. déclenchement conditionnel d'une macro
    Par lafron dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/12/2009, 22h48
  3. Appel conditionnel d'une fonction
    Par filtep dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/12/2009, 15h50
  4. Déclenchement auto d'une fonction sans intervention humaine
    Par lodan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/03/2007, 18h31
  5. Réponses: 4
    Dernier message: 08/06/2004, 10h01

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