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 :

Perte de fonctionnement des appels de fonction dans le cas d'un appel ajax


Sujet :

JavaScript

  1. #1
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut Perte de fonctionnement des appels de fonction dans le cas d'un appel ajax
    Bonjour, je fais un appel Ajax pour la récupération de données à afficher dans un tableaux, et après avoir fonctionné une fois les appels au fonction de rafraichissement du tableau ne s'effectuent plus.
    Ce sont ces deux appels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Prec.addEventListener('click',ReculerListeAffichage());
    Suiv.addEventListener('click',AvancerListeAffichage());
    qui correspondent bien au bouton suivant qui refuse de se declencher, rien ne se passe dans le debugguer, même si au demarrage de l'application le code est executé.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <button id="Précédent" type="button" class="btn  btn-info pull-right"> << </button>
     <button id="Suite" type="button" class="btn btn-info pull-right"> >> </button>

    Ci-dessous le code Javascript complet :
    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
    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
    <script>
    $(document).ready(function()
    {
     $("td").click(function()
      {
       if( $(this).attr("contenteditable") == "true")
       {
        // le"id" du td doit contenir l'id de la BDD
        // le "name" doit contenir le nom du champ à modifier
         var contenu_avant = $(this).text();
          var id_bdd = $(this).attr("id");
          var champ_bdd = $(this).attr("name");
        //alert("avant =" + contenu_avant);
        $(this).blur(function()
            {
             var contenu_apres = $(this).text();
             //alert("contenu apres = " + contenu_apres);
     
             if (contenu_avant != contenu_apres)
               {
                 parametre='id='+id_bdd+'&champ='+champ_bdd+'&contenu='+contenu_apres ;
                //alert(param) ;
                $.ajax({
                  url: "updateDyn.php",
                  type: "POST",
                  data: parametre,
                  success: function(html) {
                        //alert(html);
                        }
                      });
                }
              });
            };
          });
    // Fonction de pagination du tableau qui renvoie les lignes à afficher
    let Debut=$("#Debut").text();
    let Fin=$("#Fin").text();
    $.ajax({
        url: "PHP_Pour_Ajax/MiseAjourTableauPagination.php",
       type: "POST",
        data: {ledebut:Debut,
              lafin:Fin},
        success: function(data){
          $("#TableauRetourJquery").html(data);
        },
        error: function(){}
        });
    });
     
     
     
    const  Prec=document.getElementById("Précédent")
    const  Suiv=document.getElementById("Suite")
     
     
     
     
    function ReculerListeAffichage()
    {
      let ValeurDebut=$("#Debut").text();
      let ValeurFin=$("#Fin").text();
      let ValeurChiffreDebut = parseInt(ValeurDebut)-10;
      let ValeurChiffreFin = parseInt(ValeurFin)-10;
      if (ValeurChiffreDebut<0) {ValeurChiffreDebut=0;}
      if (ValeurChiffreFin<10) {ValeurChiffreFin=10;}
      $("#Debut").text(ValeurChiffreDebut);
      $("#Fin").text(ValeurChiffreFin);
      a=MAJ();
    }
     
    function AvancerListeAffichage()
     
    {
      let ValeurDebut=$("#Debut").text();
      let ValeurFin=$("#Fin").text();
      let ValeurChiffreDebut = parseInt(ValeurDebut)+10;
      let ValeurChiffreFin = parseInt(ValeurFin)+10;
      $("#Debut").text(ValeurChiffreDebut);
      $("#Fin").text(ValeurChiffreFin);
      a=MAJ();
    }
     
    Prec.addEventListener('click',ReculerListeAffichage());
    Suiv.addEventListener('click',AvancerListeAffichage());
     
     
     
     
    function MAJ(){
     let Debut=$("#Debut").text();
     let Fin=$("#Fin").text();
     $.ajax({
         url: "PHP_Pour_Ajax/MiseAjourTableauPagination.php",
                    type: "POST",
         data: {ledebut:Debut,
               lafin:Fin},
         success: function(data){
           $("#TableauRetourJquery").html(data);
         },
         error: function(){}
         });
         return 0;
     }
     
    </script>

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    tu dois avoir au démarrage sur la page une initialisation des fonctionnalités sur le tableau

    Le fait de remplacer le contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $("#TableauRetourJquery").html(data);
    Modifie le DOM et tu perds donc les attributions...
    il faut réinitialiser les fonctionnalités après avoir modifié le contenu
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    Bonjour, comment puis je faire ? Il ne faut pas recharger la page quand même ? J'ai regardé du côté de l'initialisation Html mais je ne vois que la méthode reset(). Ce serait cool d'avoir un exemple pour me mettre sur la voie. Merci d'avance.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Prec.addEventListener('click',ReculerListeAffichage());
    Suiv.addEventListener('click',AvancerListeAffichage());
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre régulier Avatar de tag9724
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2021
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2021
    Messages : 64
    Points : 113
    Points
    113
    Par défaut
    Le fait d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Prec.addEventListener("click", ReculerListeAffichage())
    Revient en fait a faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ReculerListeAffichage()
    Prec.addEventListener("click", undefined)
    Ceci s'explique par le fait que ReculerListeAffichage() et ReculerListeAffichage() ne renvoient pas une fonction à leurs exécution, exemple :

    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
    function ReculerListeAffichage() {
      return function () {
        let ValeurDebut = $("#Debut").text()
        let ValeurFin = $("#Fin").text()
     
        let ValeurChiffreDebut = parseInt(ValeurDebut) - 10
        let ValeurChiffreFin = parseInt(ValeurFin) - 10
     
        if (ValeurChiffreDebut < 0) {
          ValeurChiffreDebut = 0
        }
     
        if (ValeurChiffreFin < 10) {
          ValeurChiffreFin = 10
        }
     
        $("#Debut").text(ValeurChiffreDebut)
        $("#Fin").text(ValeurChiffreFin)
        a = MAJ()
      }
    }

    Le plus simple donc dans ton cas serais juste de retirer les parenthèses dans ton addEventListener comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Prec.addEventListener("click", ReculerListeAffichage)
    Suiv.addEventListener("click", AvancerListeAffichage)

    Comme l'as aussi dit SpaceFrog si tes boutons sont contenus dans #TableauRetourJquery et que tu appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("#TableauRetourJquery").html(data);
    ceci aura pour effet de recréer de tout nouveau boutons qui remplacerons ceux auquel tu aura rajouter les évènements.

    Si c'est le cas il faudra appeler à nouveau les deux lignes addEventListener à la suite.

  6. #6
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    Super, merci pour vos réponses. Bonne journée.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/04/2018, 19h13
  2. Quel est le meilleur moyen de faire des appels AJAX en Rails ?
    Par Invité dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 15/12/2016, 01h03
  3. Perte d'information avec appel AJAX
    Par zadoner33 dans le forum AJAX
    Réponses: 3
    Dernier message: 21/06/2016, 14h39
  4. Réponses: 3
    Dernier message: 08/12/2012, 18h30
  5. Passer des paramètres à une fonction dans before_filter
    Par abir84 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/01/2008, 19h40

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