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

Bibliothèques & Frameworks Discussion :

Actualiser le gestionnaire d'événement


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut Actualiser le gestionnaire d'événement
    Prototype: Actualiser le gestionnaire d'événement qui observe $$('li.classMaListe').each apres une actualisation ajax de ma liste.

    Bonjour

    Je m'inspire du Widget Browser d'Apple pour cet exemple:
    J'ai deux listes, dans deux div: dans le premier une liste de catégories (category.php); dans le second la liste des noms des items d'une catégorie (selection.php?category=all tous par default).
    Via Ajax un click sur une catégorie, actualise la liste des items; un click sur un nom d'item affiche un widget dans un troisième div.

    HTML:
    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
     
            <h3>Widget Browser</h3>
            <ul>
              <li class="category">
                <h4>Category</h4>
                <div id="category">
                <?php include(category.php) ?>
                </div>
              </li>
              <li class="name">
                <h4>Name</h4>
                <div id="widgetsname">
                <?php include(selection.php?category=All) ?>
                </div>
              </li>
              <li class="widget">
                <h4>Widget</h4>
                <div id="widget" align="center">
                <?php include('default.html') ?>
                </div>
              </li>
            </ul>
    Résultat de category.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ul>
    	<li class="widgetcategory">All</li>
    	<li class="widgetcategory">cat1</li>
    	<li class="widgetcategory">cat2</li>
    	...
    	<li class="widgetcategory">Catn</li>
    </ul>
    Résultat de selection.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <ul>
    	<li class="widgetname">Widget1</li>
    	<li class="widgetname">Widget2</li>
    	...
    	<li class="widgetname">Widgetn</li>
    </ul>
    Les actualisations Ajax/Prototype:

    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
     
     Event.observe(window, 'load', init, false);
     
    	//note: j'ai d'autres fonctions ici
     
    	$$('li.widgetcategory').each(function(clickcategory)
    	{
    		clickcategory.observe('click', function()
    		{
    			new Ajax.Updater(widgetsname, 'selection.php', {
    				method: 'GET',
    				parameters: {
    					category: escape(this.innerHTML)
    				}
    			});
    		});
    	});
    	$$('li.widgetname').each(function(clickname)
    	{
    		clickname.observe('click', function()
    		{
    			q=this.innerHTML.replace(/ /g,"_");
    			q=q.toLowerCase();
    			new Ajax.Updater(widget, 'widgets/'+q+'.html')
    		});
    	});
    }
    L'avantage d'utiliser $$('li.classMaListe').each est qu'il n'est point besoin d'écrire une requête ajax pour chaque cas (catégories et items).

    Au chargement de la page, tout va bien: par défaut tous les items sont affichés et chaque appel affiche bien le widget voulu dans le troisième div.

    Par contre quand on click une catégorie, la liste de ses items est bien actualisée mais les clicks sur ces items ne fonctionnent plus.
    Il faudrait actualiser le gestionnaire d'événement de prototype à la fin du chargement d'une catégorie. Bien que par défaut tous les items soient pris en compte dans le gestionnaire, affiner la liste des items (un click sur une catégorie réduit le nombre d'item à ceux de la catégorie) semble annuler le gestionnaire d'événement pour la liste des items.
    Comment l'actualiser?

    J'ai deux questions subsidiaires à propos du widget affiché dans le troisième div:
    1/ s'il contient du javascript comment l'exécuter?
    2/ quand il contient une iframe, le premier iframe affiché sera également affiché lorsqu'un second widget contenant également un iframe sera appelé. Comment gérer les iframes avec ajax/prototype?


    Merci beaucoup.

  2. #2
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut Une solution
    Il existe une solution trouvée ici, mais le code js est dans le fichier php qui est appelé avec Ajax et est exécuté grâce à l'option evalScripts: true.
    Je préférerais séparer complètement html/css/js, et avoir un code js qui actualise les événements à l'appel de la fonction ajax, avez-vous une autre solution ?

Discussions similaires

  1. Maj dynamique d'un gestionnaire d'événement
    Par Herode dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 10h15
  2. Gestionnaire d'évènements pour les fichiers sur disque
    Par chourmo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/03/2006, 16h18
  3. Gestionnaire d'événements pour la souris en assembleur
    Par bassim dans le forum Assembleur
    Réponses: 2
    Dernier message: 09/12/2005, 23h45
  4. [VBA] Gestionnaire d'évènement commun
    Par Neilos dans le forum Access
    Réponses: 11
    Dernier message: 14/06/2005, 11h18
  5. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14

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