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 :

Fancybox - Ajax


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut Fancybox - Ajax
    Bonjour à tous, voici mon problème :

    Ma page web est constituée d'un menu sur la gauche, listant des bons de commandes. Lorsque je clique sur l'un d'entre eux, une requête ajax est effectuée et le résultat s'affiche au centre de l'écran. Ainsi, à chaque fois que je clique sur un bon de commande, ses détails s'affichent au centre de l'écran.

    Cependant, je voudrais que, lorsque je clique sur un élément du centre de l'écran, une fancybox s'ouvre.

    Tout cela marche parfaitement ... seulement pour le premier bon de commande sélectionné. A partir du moment où je clique sur un second bon de commande sur la gauche, la fancybox que j'essaie d'ouvrir à partir du contenu au centre ne s'ouvre pas. Idem si je clique sur un premier puis un second bon sans avoir ouvert aucune fancybox..

    En somme, dès que le contenu central de la page est actualisé une deuxième fois via Ajax, les fancybox ne veulent plus s'ouvrir.. Je le vois comme ça.

    En espérant trouver de l'aide.
    Merci d'avance à tous ceux qui prendront la peine de réfléchir dessus!

    PS : j'ai été obligé de mettre le code JS de ma fancybox (y compris les fichiers à inclure) dans le fichier Ajax et non dans la page d'accueil dont le contenu est modifié en Ajax, ce que je trouve étrange...

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    C'est difficile de t'aider comme ça. Essaye d'installer firebug. Tu pourras inspecter les erreurs rencontrées et l'état exact de toutes tes variables javascript.

    Si tu n'arrives toujours pas à régler le problème, donne-nous plus de détails sur ce que dit firebug

    bonne chance

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Merci de ta réponse. Je suis sous mac et safari. J'ai bien le débugger mais je ne sais pas trop m'en servir.. Comment inspecter l'état du javascript en temps réel ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    firebug doit fonctionner dans safari normalement.

    Il faut regarder l'onglet DOM pour avoir l'état exact du javascript.

    Si tu veux connaître l'état à un moment particulier tu peux faire dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trucmachin = monObjetAEtudier; alert("stop");
    monObjetAEtudier peut aussi être this.
    Tu le trouveras ensuite dans l'onglet DOM soit dans les premières variables de la racine, soit dans celles de window.

    N'oublie pas le bouton "actualiser" de l'onglet DOM. Ca peut servir

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Lorsque je reclique sur un lien censé ouvrir une fancybox et qu'il ne le fait pas, j'obtiens ceci dans la console :

    "TypeError: Result of expression 't' [undefined] is not an object."

    Et la ligne indiquée ne correspond à rien de censé dans le code. Si je supprime la partie de code concernée d'après le debugger, l'erreur s'affiche quand même mais à un autre endroit du code (elle est indiquée dans la ligne d'un commentaire -_- )

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    oui, firebug fait parfois un peu de la merde dans la localisation du problème. As-tu une variable t dans ton code, ou utilises-tu un librairie externe?

    Tu peux aussi utiliser firebug pour faire du pas à pas. Dans script, tu choisis une ligne de code un peu en amont du problème. Ensuite tu fais les actions qui génèrent ton bug. Firebug va bloquer l'execution au niveau de la ligne où tu as cliqué. Ensuite tu n'as plus qu'à cliquer sur la première flèche jaune pour voir tous les appels javascript.

    Dans la fenêtre de droite tu as l'état de toutes les variables.

    Bonne chance

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    J'utilise une librairie externe : fancybox. Comment je pourrais faire dans ce cas là ? :/

  8. #8
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Dans ce cas là, essaye de nous donner ton code. Essaye de nous faciliter la tâche en enlevant tout ce qui ne concerne pas le problème. Ne garde que ce qui peut nous intéresser

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Dans ma page d'accueil, voici le script qui me permet de lancer la requete ajax lors d'un click sur un onglet (soit une commande) :

    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
    $("#gauche li").click(function() { 	//Lors d'un clic sur un onglet
      $("#gauche li").removeClass("selected"); //on supprime toutes les classes "selected"
      $(this).addClass("selected"); //on ajoute la classe "selected" à l'onglet sélectionné
     
      $field = $(this);
      $('#centre').html(''); // on vide les resultats
      $('#loader2').remove(); // on retire le loader
     
      // on envoie la valeur recherché en POST au fichier de traitement
      $.ajax({
        type : 'POST', // envoi des données en GET ou POST
        url : 'scripts/ongletsAjax.php' , // url du fichier de traitement
        data : 'contenu='+$(this).attr('class') , // données à envoyer en  GET ou POST
        beforeSend : function() { // traitements JS à faire AVANT l'envoi
          $('#centre').after('<center><img src="images/loader2.gif" alt="loader" id="loader2" /></center>'); // ajout d'un loader pour signifier l'action
        },
        success : function(data){ // traitements JS à faire APRES le retour d'ajax-search.php
          $('#loader2').remove(); // on enleve le loader
          $('#centre').hide().html(data).fadeIn(); // affichage des résultats dans le bloc
        }
      });
      return false;
    });
    Le contenu au centre de ma page s'actualise donc selon ce qui est décrit dans le fichier ongletsAjax.php.
    Dans ce fichier ongletsAjax.php, se trouvent plusieurs liens ouvrant chacun une fancybox (librairie externe utilisant jquery).

    Mon problème : lorsque je clique une première fois sur un onglet, le centre de mon écran s'actualise grâce à ajax, je clique sur un lien, et ma fancybox s'ouvre correctement. Cependant, si je veux continuer en cliquant sur un autre onglets puis à nouveau sur un lien du centre de la page, la fancybox ne s'ouvre plus.

    J'ai l'impression que dès qu'une deuxième requête ajax est effectuée, les fancybox sont désactivées. En effet, un moteur de recherche en ajax se trouve aussi sur ma page, et si j'effectue une recherche (et donc une requete ajax) puis ensuite décide de consulter un onglet, là non plus mes fancybox ne fonctionnent pas..

    J'espère avoir éclairci le problème..

    Voici le bout de code me permettant de faire ouvrir mes fancybox dans le fichier ongletsAjax.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $.fancybox({
      'type': 'iframe',
      'padding': 0,
      'width': 850,
      'height': 430,
      'scrolling': 'no',
      'href': 'noTracable.php'
    });

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Par défaut
    Il me semble avoir trouvé la réponse, seulement je n'arrive toujours pas à résoudre mon problème :

    "To fix this error, simply move your calls to shadowbox.js and shadowbox.init() to either the bottom of the <body> tag, or below the <body> tag. Both locations should work as opposed to inside the <head> tag."

    J'ai trouvé ça sur le forum de shadowbox, ça doit être une librairie similaire à fancybox.

    Si je comprends bien, il ne faut pas déclarer la fancybox après la balise <body> ? Et moi, vu que cela se fait dans le fichiers ajax, et que celui-ci met à jour une div de ma page d'accueil, le contenu du fichier ongletsAjax.php (et donc les liens vers les fancybox) se trouve APRES ma balise <body> dans ma page d'accueil.. C'est de là que doit venir le problème.

    Mais comment faire pour déclarer les fancybox dans la page d'accueil, si je le fais dans la page d'accueil, elles ne marchent carrément plus du tout!

Discussions similaires

  1. [AJAX] FancyBox : Conflit lors d'un appel Ajax
    Par mwa33 dans le forum AJAX
    Réponses: 0
    Dernier message: 06/08/2013, 14h01
  2. Réponses: 2
    Dernier message: 20/04/2012, 22h51
  3. [Plugin] FancyBox et ajax
    Par Marquo2 dans le forum jQuery
    Réponses: 4
    Dernier message: 26/07/2011, 11h21
  4. Requete Ajax via Jquery & FancyBox
    Par Warno dans le forum jQuery
    Réponses: 18
    Dernier message: 17/04/2010, 18h01

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