Au moins une raison possible au fait que fancybox ne s’exécute qu’au second click

Je vais parler aujourd’hui d’une petite aventure qui m’est arrivée avec fancybox. Pour les besoins d’un projet WordPress utilisant le plugin Team, j’avais pour mission de masquer les éléments affichés sauf la photo, puis d’afficher ces éléments dans une fancybox au click sur la photo. Problème : fancybox ne s’exécute qu’au second click. Et il y a une raison à celà !Voici la partie html :

Le but du jeu est de masquer par exemple la balise <p> pour ensuite l’injecter lors du clic sur le nom (<a> <h4>) dans une fancybox.

La démarche me semblait simple :

    masquer le contenu

  • créer un click event
  • récupérer le contenu dans une variable à ce moment là
  • le passer en valeur de « content » dans fancybox

Voici le code js :

Voici le jsFiddle

Erreur : obligé de cliquer 2x pour faire apparaitre la fancybox.

En réalité ce qui se passe, c’est que lorsqu’on attache l’event click, on se contente de binder le lien .fancybox, mais aucun trigger event n’est initialisé.
Ce qu’il faut faire, c’est chaîner le .fancybox() directement après l’event click.

Voici la partie html à nouveau avec un href qui pointe vers une div vide et masquée :

et le js corrigé :

 Et le jsFiddle 🙂

Voilà, c’est tout. Celà fait partie de ces subtilités inhérentes au javascript. Hope this’ll help 😉

Publié par

Franck

Développeur frontend, je travaille au sein de l'agence nouvelleMARQUE à Marseille. Html5, Css3, jQuery, Php et Wordpress sont les outils du quotidien que j'appréhende avec toujours beaucoup d'enthousiasme. J'aime le web et toute la culture qui l'entoure, et c'est avec plaisir que je partage ma passion et mes découvertes au travers de mon blog desirelabs.fr ou sur twitter.

3 réflexions au sujet de « Au moins une raison possible au fait que fancybox ne s’exécute qu’au second click »

  1. $ = jQuery.noConflict();
    Cette ligne permet de redéclarer l’objet jQuery en mode sans conflit, pour l’utilisation éventuelle d’une autre bibliothèque qui utiliserait également le symbole $ comme Mootools ou Angular.
    Redéfinir cet objet et le restoquer dans un $ n’aura aucun effet.
    j = $ = jQuery.noConflict();
    j(document).ready(function () {
    ………….

    On utilisera plutôt un nom d’objet différent du $.

    Cheers.

  2. Niquel l’article j’avais le même problème puis je cherchais à mettre du contenu HTML directement dans la fancy et à chaque fois que je le fais je ne me souviens plus de la bonne méthode pour y arriver, il devrait sincèrement pouvoir le proposer nativement avec comme cible le href d’un lien cliqué href= »#target-container », ça simplifierai les choses.

    Encore merci de l’article 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *