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

AJAX Discussion :

[AJAX] Javascript non interprété dans fonction Ajax


Sujet :

AJAX

  1. #1
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut [AJAX] Javascript non interprété dans fonction Ajax
    Bonjour,

    J'ai un petit souci dans un formulaire que j'ai developpé.
    En fait j'ai créé des formulaires qui peuvent s'appeler directement, ou être chargé en Ajax dans une page "Récapitulatif" afin de pouvoir éditer chaque étape du formulaire sur la page de récapitulatif.
    J'ai un petit bout de Javascript dans le formulaire, tout marche très bien quand on l'appel directement, en revanche, lorsque le formulaire est appelé en Ajax, les onClick ne sont plus interprété.

    J'ai une fonction loadTypeIntervention :
    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
     
    function loadTypeIntervention(idParent)
    {
      if (idParent == 16) {
        var otherId = 1;
      } else {
        var otherId = 16;
      }
      document.getElementById("imgInterv" + idParent).style.border = "2px solid green";
      document.getElementById("imgInterv" + otherId).style.border  = "none";
      document.getElementById("tdCheck" + idParent).innerHTML = "<img src=\"' . $global_web_site . $global_rep_image_contenu_page . '/graphisme_global/picto-check.gif\" />";
      document.getElementById("tdCheck" + otherId).innerHTML  = "";
      document.getElementById("interv" + idParent + "-1").style.display = "table-cell";
      document.getElementById("interv" + otherId + "-1").style.display  = "none";
      document.getElementById("interv" + otherId + "-2").style.display  = "none";
      document.getElementById("interv" + otherId + "-3").style.display  = "none";
    }

    Si j'appel cette fonction juste après dans la balise script, elle marche dans les 2 cas (appel direct du formulaire ou appel en ajax), mais pas sur mon onClick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="javascript:void(0)" onClick="loadTypeIntervention(16)">
    Dans ce cas la fonction marche bien quand le formulaire est appelé directement, en revanche quand je l'appel en Ajax j'ai une erreur :

    loadTypeIntervention is not defined

    Quelqu'un sait de quoi cela peut venir car la je suis en train de m'arracher les cheveux

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Bonjour,

    C'est parce que ton javascript n'est pas évalué lorsqu'il est chargé par AJAX.

    Je pense que cet article de la FAQ AJAX t'aideras à trouver la réponse.

    Voir ICI

    Redis-nous ce que ça donne.


    Cordialement,

  3. #3
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par Torgar Voir le message
    Bonjour,

    C'est parce que ton javascript n'est pas évalué lorsqu'il est chargé par AJAX.

    Je pense que cet article de la FAQ AJAX t'aideras à trouver la réponse.

    Voir ICI

    Redis-nous ce que ça donne.


    Cordialement,
    Salut et merci de ta réponse,
    J'ai essayé d'ajouter un eval lors de mon appel Ajax, mais cela n'a pas l'air de fonctionner non plus, voici le code de l'appel Ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function editStep(numStep)
    {
      switchDiv("step" + numStep + "Recap", "", "");
      ShowPage("step" + numStep + "Edit", "' . ClassLien_CalculLien_Ajax("page_custom", "fichier=ajax&which_frame=recap_edit") . '&demandeId=' . $demandeId . '&numStep=" + numStep, "GET", "");
      switchDiv("step" + numStep + "Edit", "", "");
      var mesScripts = document.getElementById("step" + numStep + "Edit").getElementsByTagName("script");
      for (var i = 0; i < mesScripts.length; i++) {
        eval(mesScripts[i].innerHTML);
      }
    }
    La fonction ShowPage effectue un getXhr classique et place le responseText dans la div passé en paramètre (dans le cas présent, la div step1Edit).

    EDIT : Quand je fait un alert(mesScripts.length), j'obtient 0, il n'a donc pas l'air de détecter les scripts présents dans ma fonction Ajax

  4. #4
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Tu peux nous montrer ce qu'affiche ta fonction AJAX s'il te plait ?

    Parce que si ta fonction loadTypeIntervention n'est pas chargée via l'AJAX entre des balises <script> c'est normal qu'il ne se passe rien. C'est ce que j'avais compris au départ. Il semblerait que je me sois trompé

  5. #5
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Oui voila le contenu chargé dans le div step1Edit :

    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
     
    /* Pleins de balises meta */
     
    <script type="text/javascript">
      function loadTypeIntervention(idParent)
      {
        if (idParent == 16) {
          var otherId = 1;
        } else {
          var otherId = 16;
        }
     
        document.getElementById("imgInterv" + idParent).style.border = "2px solid green";
        document.getElementById("imgInterv" + otherId).style.border  = "none";
        document.getElementById("tdCheck" + idParent).innerHTML = "<img src=\"/graphisme_global/picto-check.gif\" />";
        document.getElementById("tdCheck" + otherId).innerHTML  = "";
        document.getElementById("interv" + idParent + "-1").style.display = "table-cell";
        document.getElementById("interv" + otherId + "-1").style.display  = "none";
        document.getElementById("interv" + otherId + "-2").style.display  = "none";
        document.getElementById("interv" + otherId + "-3").style.display  = "none";
      }
     
      function addInterv(idIntervention, numIntervention, parentInterventionId)
      {
        if (numIntervention != "3") {
          var newIntervNum = Math.round(numIntervention) + 1;
          document.getElementById("interv" + parentInterventionId + "-" + newIntervNum).style.display = "block";
        }
        ShowPage("placebo", "index.php?l_nr=page_custom.php&l_nr_c=5a2d09bf49ab76f2ecb5f19a404b7772&fichier=ajax&which_frame=form1_add_intervention&affiche_contenu_uniquement=true&demandeId=1&interventionId=" + idIntervention + "&numIntervention=" + numIntervention, "GET", "");
      }
     
      function validStep()
      {
        if (document.getElementById("intervention16-1").value != "" || document.getElementById("intervention1-1").value != "") {
          validEditRecap("1");	
        } else {
          alert("Merci de choisir au moins une intervention.");
          return false;
        }
      }
    </script>
     
    /* Contenu HTML */
    Les scripts sont pourtant biens placés dans une balise script

  6. #6
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Et si tu mets ces fonctions dans un fichier functions.js (par exemple), que tu charge dans ton en-tête html, est-ce que ça marche ?

    Je continu de regarder pourquoi le code n'est pas évalué (dans mes test en local non plus d’ailleurs).

  7. #7
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par Torgar Voir le message
    Et si tu mets ces fonctions dans un fichier functions.js (par exemple), que tu charge dans ton en-tête html, est-ce que ça marche ?

    Je continu de regarder pourquoi le code n'est pas évalué (dans mes test en local non plus d’ailleurs).
    En fait je n'ai pas accès à tout le système, je ne peut pas externaliser mes scripts JS

  8. #8
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Et tout simplement mettre tes fonctions dans la page qui exécute l'ajax ?

  9. #9
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par Torgar Voir le message
    Et tout simplement mettre tes fonctions dans la page qui exécute l'ajax ?
    Pour l'étape 1 c'est faisable, mais pour les 3 autres j'ai des tableaux et des boucles PHP que je ne peut pas utiliser dans la page qui exécute l'ajax

Discussions similaires

  1. Syntaxe data dans fonction $.(ajax)
    Par arthuro45 dans le forum jQuery
    Réponses: 2
    Dernier message: 25/05/2010, 19h10
  2. Réponses: 2
    Dernier message: 10/10/2009, 19h40
  3. Réponses: 1
    Dernier message: 25/09/2009, 12h03
  4. fonction javascript non reconnues dans ECLIPSE
    Par flamant dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/06/2009, 15h58
  5. [AJAX] lien (href) cliquable si ajax (onclick) non interprété
    Par juJuv51 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/02/2007, 15h34

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