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

jQuery Discussion :

jquery - un fichier php appelé 2x au clic sur un lien


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de caius2
    Femme Profil pro
    en reconversion professionnelle dans le développement web
    Inscrit en
    Mai 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en reconversion professionnelle dans le développement web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mai 2015
    Messages : 36
    Par défaut jquery - un fichier php appelé 2x au clic sur un lien
    Bonjour,

    cela fait un looooong moment que je cherche sans comprendre pourquoi ni trouver d'où vient le problème même si je connais la 1ère cause (regarder entre la chaise et le clavier pour trouver le fautif)

    alors voilà, j'ai un tableau fait avec le plugin "editablegrid" dans ce tableau j'ai une cellule qui contient au lien. au clic sur ce lien, cela m'affiche une div contenant un autre tableau de gestion de contact. le contenu de ce tableau dépend d'un script php qui va parcourir une table de ma base de données et le ldap. Il s'y trouve également un bouton qui affiche un formulaire (qui dépend d'un autre script encore) pour ajouter une nouveau contact à mon tableau.

    le problème vient du fait que lorsque je clic sur le lien dans l'editablegrid exemple : une fois pour afficher(show()) l'autre div, une deuxième fois pour masquer (avec hide() ) cette fameuse div. Si je viens à cliquer sur ce lien une 3e fois et par la suite à cliquer le bouton d'ajout (faisant apparaitre le formulaire), alors le script php qui lui est associé sera appelé 3x.

    le code :

    ceci correspond au div contenant le tableau de contact et le formulaire :

    Code HTML : 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
     <!--  div avec tout le contenu ( datatable + bouton s ) qui apparait lorsqu'on clique sur "gestion_contact" de la colonne contact dans l'editablegrid -->
        <div id="full_gest_dest" >
            <p>Gestion des destinaires </p>
     
            <!--  div contenant les bouton ajout (ouvrant le formulaire) et de fermeture de la fenetre-->
            <div id="div_head">
                <a id="showLinkDest" class="button green"><i class="fa fa-plus"></i> Ajouter un destinaire</a>
                <a href="#" class="DestClose">Fermer</a>
            </div>
     
            <!--  div contenant le datatable -->
            <div id="dest_scol">
     
            </div>
        </div>
     
        <!--  div avec tout le contenu (formulaire + boutons )  qui apparait lorsqu'on clique sur "ajouter un contact" -->
        <div id="full_link_Form">
            <!--  div contenant le formulaire d'ajout d'un lien -->
            <div id="add_destinataires"></div>
     
            <!-- div contenant les boutons pour valider ou annuler le formulaire -->
            <div class="row tright">
                <a id="addbuttonGestionnaire" class="button green"><i class="fa fa-save"></i> Valider</a>
                <a id="cancelbuttonSelect" class="button delete">Annuler</a>
            </div>
        </div>

    ceci est le code qui, lorsqu'on clic sur "gestion_contact" (le lien dans la cellule du tableau editablegrid) ouvre le tableau des contacts (affichage géré par datatables)

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    $adresse = $_POST['id'];
     
    *
     * compte le nombre d'enregistrement de contact présent pour une adresse donnée.
     */
    $select_nb_contact = 'SELECT id FROM contact_adresse WHERE id_adresse = '.$adresse.' AND destinataire = 1 ';
    $result_nb = $mysqli->query($select_nb_contact) or die('erreur sur le calcul du nombre decontacts');
    $num_rows = mysqli_num_rows($result_nb);
     
     
     
    /*
     *  requetes mysql pour obtenir les infos du contact (uid, type) en focntion de l'adresse
     *
     */
    $select_dest = 'SELECT contact_adresse.uid,contact_adresse.id, type_contact.lib_type FROM contact_adresse, adresse_livraison, type_contact
                    WHERE contact_adresse.id_adresse = adresse_livraison.id_adresse AND contact_adresse.id_type = type_contact.id_type AND adresse_livraison.id_adresse = ' . $adresse . ' ';
    $result_select = $mysqli->query($select_dest) or die('erreur sur la selection des contacts');
    $mysqli->close();
     
     
    /*
     * requete ldap sur l'uid pour recupérer le cn du contact
     *
     * */
    $ds = ldap_connect($serveurLdap, $port);
    $liste_dest = array();
    while ($row = $result_select->fetch_assoc()) {
     
        $filtre = "(&(uid=" . $row['uid'] . "))";
        $sr = ldap_search($ds, $racine, $filtre, $restrict, 0) or die ("Error in search query");
        $info = ldap_get_entries($ds, $sr);
     
        for ($i = 0; $i < $info["count"]; $i++) {
            $liste_dest[] =  [  'uid' => $info[$i]["uid"][0],
                                'cn' => $info[$i]["cn"][0],
                                'type'=> $row['lib_type'],
                                'id' => $row['id'] ];
        }
    }
     
     
    $ret = '
    <script>
     
    var nb_contact = '.$num_rows .';
    var id=' . $adresse . ';
            LinkDestinataire = function(id)
            {
                var self = this;
                $.ajax({
                    url: "./TEST/adresse_destinataire/new_liste_contact.php",
                    type: "POST",
                    dataType: "html",
                    data: {
                        id_addr:id                           
                    },
                    success: function (response)
                    {
                        if (response) {  
                           $("#add_destinataires").empty().html(response);
                        }
                        else
                            message("erreur","Erreur dans la requete de gestion des destinataires !");
                    },
                    error: function(XMLHttpRequest, textStatus, exception) { 
                        alert("Ajax failure\\n" + textStatus); 
                    },
                    async: true
     
                });
     
            };
     
            if (nb_contact >= 1){
                 $("#showLinkDest").hide();
                  $("#showLinkDest").replaceWith("<p>Vous ne pouvez plus enregistrer de destinataire : nombre limite atteint</p>");
     
            }else 
                 $("#showLinkDest").show();
     
     
             $("#addbuttonGestionnaire").click(function () {
                addNewGest(id); //fonction se trouvant dans adresse.js
            });
     
     
            $("#showLinkDest").click(function () {
                if ( $("#full_link_Form").css("display", "none") ){
                     $("#full_link_Form").show();
                     LinkDestinataire(id);
     
                }else {
                     $("#full_link_Form").hide();
                }
     
            });
     
            $("#cancelbuttonSelect").click(function () {
                    $("#full_link_Form").hide();
            });
     
          </script>
     
    <!-- tableau des destinataires apparaissant dans la gestion des destinataires-->
     <table id="destinataire_scol_list" class="display">
        <thead>
        <tr>
            <th>CN 1</th>
            <th>UID</th>
            <th>Type</th>
            <th>contact</th>
            <th>destinataire</th>
            <th> Supprimer</th>
         </tr>
        </thead>
        <tbody> ';
    foreach ($liste_dest as $key => $value) {
        $ret .= '<tr>';
        $ret .= '<td id="cn">' . $value['cn'] . '</td>';
        $ret .= '<td id="uid">' . $value['uid'] . '</td>';
        $ret .= '<td id="type">' . $value['type'] . '</td>';
        $ret .= '<td id="contact" >' . $value['id'] . '</td>';
        $ret .= '<td id="destinataire">oui/non</td>';
        $ret .= '<td><img class="supprimer" src="../../ressources/images/cross.png" onclick="deleteContact('.$value['id'].')" alt="supprimer"></td>';
        $ret .= '</tr>';
    }
     
    $ret .= ' </tbody> </table>';
     
    echo $ret;

    la fonction javascript qui lie le tout :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    /*
     * fonction réagissant au click sur "gest-dest" dans la colonne Destinataire
     */
    DatabaseGrid.prototype.destinataire_addr = function (id) {
     
        var self = this;
        $.ajax({
            url: './TEST/adresse_destinataire/new_gestion_contact.php',
            type: 'POST',
            dataType: "html",
            data: {
                id: id,
            },
            success: function (response) {
                if (response) {
                    showAddLink();
                    $('#dest_scol').html(response);              // c'est ici qu'est ajouter le tableau de contact à la div
                    $('#destinataire_scol_list').DataTable().destroy();
                    $(document).ready(function () {
                        $('#destinataire_scol_list').DataTable({
                            "columnDefs": [
                                {
                                    "width": "0px",
                                    "targets": 0
                                }
                            ],
                            "language": {
                                "url": "//cdn.datatables.net/plug-ins/1.10.16/i18n/French.json"
                            }
     
                        });
                    });
                    DestClose();
     
                }
                else
                    message("erreur", "Erreur dans la requete");
            },
            error: function (XMLHttpRequest, textStatus, exception) {
                alert("Ajax failure\n" + textStatus);
            },
            async: true
     
        });
     
    };
     
     
    function showAddLink() {
      //  if ($("#full_gest_dest").is(':visible')) {
            $("#full_gest_dest").toggle();
            //$("#full_link_Form").toggle();
       // }
      //  else
       //     $("#full_gest_dest").show();
    };
     
    /*
     * ferme destinaire
     */
    function DestClose() {
        $('.DestClose').click(function () {
            $('#full_gest_dest').hide();
            $('#full_link_Form').hide();
        })
    };

    voilà.
    Je pense que le problème vient de mes ouverture et fermeture de div... mais je ne sais pas où se trouve mon erreur... à force de reprendre mon code, je n'arrive plus à voir

    svp, pourriez-vous me dire ce que je fais de mal ??

    merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Salut c'est une question récurrente : pour empêcher des clics multiples il te faut passer le paramètre EVENT a ta function $(...).click(function(event){...}); et effectuer avant tout chose un event.stopImmediatePropagation(); et un event.preventDefault();.

    Ainsi le faire a chaque fois que tu as un événement clic pour éviter ce type de désagrément. soit :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $(...).click(function( event ) {
      event.stopImmediatePropagation();
      event.preventDefault();
      //la suite de tes instructions
      ...
    });

    https://api.jquery.com/event.stopimmediatepropagation/
    https://api.jquery.com/event.preventDefault/

  3. #3
    Membre averti Avatar de caius2
    Femme Profil pro
    en reconversion professionnelle dans le développement web
    Inscrit en
    Mai 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en reconversion professionnelle dans le développement web
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mai 2015
    Messages : 36
    Par défaut
    pardon pour le retard, merci pour ta réponse !

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

Discussions similaires

  1. Require ou include d'un fichier php - Fichier php appelé par un call POST jQuery
    Par prinssdaraby dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/08/2012, 14h19
  2. Excécuter une fonction JS dans un fichier PHP "appelé" en Ajax
    Par Voyageur Du Net dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/05/2011, 17h21
  3. Réponses: 1
    Dernier message: 25/10/2009, 13h39
  4. Réponses: 7
    Dernier message: 26/05/2009, 19h55
  5. [Configuration] Include un fichier php dans un different site sur le meme serveur
    Par rmz_a dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 18/10/2007, 11h36

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