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 :

des dialogs multiples


Sujet :

jQuery

  1. #1
    Membre confirmé Avatar de MadStar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 27
    Par défaut des dialogs multiples
    Bonjour !

    J'aimerais faire apparaître plusieurs dialogs sur une même page. Chacune des dialogs sert à afficher un contenu reçu via Ajax.
    Pour cela j'ai créé la fonction suivante :

    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
     
    function call(url, id)
    {
        // Vérification des paramètres
        if(!url && !id) return;
     
        var node = null,
            init = false;
     
        // Récupération ou création de l'élément d'identifiant 'id'
        if($('#'+id).size())
            node = $('#'+id);
        else
        {
            node = $('<div/>').attr('id', id).hide().appendTo(document.body);
            init = true;
        }
     
        // Chargement de la page 'url' dans l'élément
        node.load(url);
     
        // Page chargée -> ouverture de la boite de dialogue
        node.ajaxComplete(
            function(event, request, settings) {
                if(init) node.dialog(); // Initialisation
                node.dialog('open'); // Ouverture
            }
        );
    }
    Cette fonction permet de charger le résultat d'une requête AJAX, dont l'URL doit être fournie en premier paramètre, dans l'élément HTML ayant pour identifiant le second paramètre pour enfin l'afficher comme un dialog.

    Pour appeler la fonction, plusieurs images possèdent donc l'attribut suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="call('une_url', 'un_id')"
    Problème : Au premier clic sur une image pas de soucis, mais lorsque que plusieurs dialogs ont été initialisées, l'ouverture d'un dialog ouvre les autres.

    Si vous avez une idée sur le problème je suis preneur .
    Merci.

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    "ajaxComplete" est un événement qui se déclenche chaque fois qu'une requête AJAX se termine. Il est donc normal que tous vos dialogues s'ouvrent.

    Il faut restreindre sa portée à l'URL traité. Voir http://danielhagnoul.developpez.com/...evenement.html et plus particulièrement l'exemple 3 : http://danielhagnoul.developpez.com/...estEvent3.html qui traite l'événement "ajaxError" et limite la portée à l'URL en cours.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre confirmé Avatar de MadStar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 27
    Par défaut
    Bon... J'ai pas du bien cerner le fonctionnement de jQuery !

    Bien que l'évènement ajaxComplete se déclenche à la fin de chaque requête Ajax, je pensais que l'évènement ne s'appliquerait que sur l'élément "node" sélectionné en fonction de l'identifiant fourni.

    Je vais refaire les choses différemment en m'aidant de votre tutoriel sur les évènements.

    Merci beaucoup !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut
    le plus simple étant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    node.load(url,function() {
                if(init) node.dialog(); // Initialisation
                node.dialog('open'); // Ouverture
            });
    Attention si la page retourne une erreur le calback sera malgré tout lancé.

  5. #5
    Membre confirmé Avatar de MadStar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 27
    Par défaut
    Effectivement ça fonctionne mais je vais essayer de faire ça plus proprement !

    Merci.

  6. #6
    Membre confirmé Avatar de MadStar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 27
    Par défaut
    Finalement il ne fallait pas changer grand chose pour que ça fonctionne correctement.

    Si j'ai bien compris, le fait de définir une fonction pour les évènements tels que ajaxComplete revient à faire un bind() entre l'évènement et la fonction. Donc à chaque fois que le bout de code en question est exécuté, la fonction telle qu'elle est définie sur le moment est liée à l'évènement.
    C'est pour cela que j'avais plusieurs dialogs qui s'ouvraient. Plusieurs fonctions pour l'affichage de différents dialogs étaient liées à l'évènement ajaxComplete.

    La fonction ajax() met à disposition des options afin de définir des fonctions pour les mêmes types d'évènements, sauf que de cette manière il n'y a pas de liaison permanente entre les fonctions et les évènements.
    En l'utilisant à la place de load() ça marche comme il faut.

    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
     
    function call(url, id)
    {
        // Vérification des paramètres
        if(!url && !id) return;
     
        var node = null;
     
        // Récupération ou création de l'élément d'identifiant 'id'
        if($('#'+id).size())
            node = $('#'+id);
        else
            node = $('<div/>').attr('id', id).hide().appendTo(document.body);
     
        // Chargement de la page 'url' dans l'élément et ouverture du dialog
        $.ajax({
            type: 'POST',
            url: url,
            success: function(html) {
                node.html(html);
            },
            error: function() {
                node.html("Erreur !");
            },
            complete: function() {
                node.dialog()
                node.dialog('open');
            }
        });
    }
    Si j'ai dit n'importe quoi ou que mon code n'est pas propre n'hésitez pas à m'en faire part.

    Merci !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/05/2007, 11h43
  2. Réponses: 4
    Dernier message: 29/03/2007, 10h10
  3. formulaire avec des champs multiples
    Par don'de dans le forum Struts 1
    Réponses: 13
    Dernier message: 16/02/2007, 09h42
  4. Tag : present avec des roles multiples
    Par zola dans le forum Struts 1
    Réponses: 4
    Dernier message: 28/04/2006, 18h01
  5. Comment intégrer des applications multiples ?
    Par Vulcanos dans le forum Composants VCL
    Réponses: 8
    Dernier message: 22/09/2005, 23h08

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