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 :

chargement dynamique données dans form.Select


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 46
    Points
    46
    Par défaut chargement dynamique données dans form.Select
    dojo 1.4

    Bonjour, j'ai créé une fonction "ajoutPane()"qui est déclenchée par un bouton. Ell a pour but l'ajout d'un "ContentPane" dans un Accordeon. A ce ContentPane j'ajoute un "div" avec une image et deux form.Select
    "abcSlt" et "pcentSlt". "pcentSlt" est chargé de façon statique donc pas de problème mais j'aimerais charger "abcSlt" de façon dynamique. Donc j'ai renseigné url pour le chargement et j'utilise l'attribut store, mais à l'exécution de la fonction les éléments (widgets et div et image) sont bien affichés dans le pane mais je n'ai rien dans le form.select "abcSlt". J'imagine qu'il y a problème de "parse" mais je ne comprend pas bien le phénomène si quelqu'un à la solution et l'explication merci de m'en faire part. Mes question pourquoi mon form.select n'est pas chargé ? Faut il utiliser un dojox.layout.ContentPane. Qu'ai je oublié de faire ?

    merci

    mon code
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     function ajoutPane() {
            	var ac = dijit.byId('actarifAchCtrl');
            	var apn = new dijit.layout.ContentPane({
    		title     : "Trait. tarif",		
            	id	  : "cp2ctrl",
            	name   : "cp2ctrl",
            	style    : "background : #c2d8ed;"});
            	ac.addChild(apn);
     
            	//créer span pour tooltip
                var divTtp = document.createElement("div");
                divTtp.id="divTtp";
                divTtp.jsId="divTtp";
                divTtp.style.marginTop="30px";
                divTtp.style.marginBottom="30px";
                divTtp.className="centrage";
                divTtp.innerHTML = "<img src='images/_info.png'></img>";
                apn.attr('content', divTtp);
     
                var abcStore = new dojo.data.ItemFileReadStore({
                    url: "tarifAch/listecodeClassement.php?codsoc="+dijit.byId('codsoc').value});
     
                var abcSlt = new dijit.form.Select ({
                    name     : 'abcSlt',
                    id       : 'abcSlt',
                    style    : 'width: 100px; height:20px;',
                    store    :  abcStore,
                    value    :  "",
                    onChange : function(){reafficheGrid(this.value, dijit.byId("pcentSlt").attr(value))}
                    });     
     
               var pcentSlt = new dijit.form.Select({
                    name     : 'pcentSlt',
                    id          : 'pcentSlt',
                    style      : 'width: 100px; height:20px;',
                    onChange : function(){reafficheGrid(this.value, dijit.byId("abcSlt").attr(value))},
                    options: [{
                        label: '> 20%',
                        value: '20'
                    },{
                        label: '> 15%  ~  20%',
                        value: '15'
                    }]});
     
     
    apn.domNode.appendChild(abcSlt.domNode);
    dojo.create('label', {'for':'abcSlt', 'innerHTML': 'Class. ABC'}, abcSlt.domNode, 'before');  
    apn.domNode.appendChild(pcentSlt.domNode);
    dojo.create('label', {'for':'pcentSlt', 'innerHTML': 'Sélection %'}, pcentSlt.domNode, 'before');
     
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Pour charger un select dynamiquement je fais de cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var store = new dojo.data.ItemFileReadStore({
    		url: "./stores/valeursSelect.php"
    });
    dijit.byId("monSelect").attr('store',store);
    J'ajoute ce code après avoir créé mon select de la même façon que celle que tu donnes.
    Toutefois, je n'ai pas essayé dans un dijit.layout.ContentPane. Mais cela ne m'étonnerait pas que cela ne fonctionne pas. Le dijit ne permet pas l'exécution de scripts contrairement au dojox.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Bonjour et merci pour la réponse ça fonctionne parfaitement. Mais je rencontre un autre problème. Après le chargement des options du form.Select le onChange est exécuté. Ce qui me pose problème dans la logique du reste de mon script. J'ai tenté plusieurs action sans succès.
    J'ai pensé qu'en attachant le store comme tu me l'a indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    var abcSlt = new dijit.form.Select ({
                    name     : 'abcSlt',
                    id       : 'abcSlt',
                    style    : 'width: 100px; height:20px;'
                    });     
     
    dijit.byId("abcSlt").attr("store", objStore);
    puis en utilisant un dojo.connect jpour le onChange

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dojo.connect(abcSlt, "onChange", function() {
                	reafficheGrid(dijit.byId("pcentSlt").attr("value"), this.value)
                });
    ça irait mieux mais rien y fait. Le onChange est exécuté par le seul fait du chargement des options dans le form.Select.
    Si quelqu'un a une idée pour empêcher l'exécution du onChange je suis intéressé.
    Sauf erreur je n'ai pas l'impression que l'on a ce comportement quand on utilisel les balises à confirmer.

    merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bonjour,

    Je pense qu'en créant la connexion onChange sur le select après le chargement du store ca ne le fera plus.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Daniel_Gibot Voir le message
    Bonjour,

    Je pense qu'en créant la connexion onChange sur le select après le chargement du store ca ne le fera plus.
    Bonjour peux tu m'indiquer comment m'y prendre car compte tenu de mon code je pensais faire les choses dans cette ordre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var abcSlt = new dijit.form.Select ({
                    name     : 'abcSlt',
                    id       : 'abcSlt',
                    style    : 'width: 100px; height:20px;'
                    });     
     
    dijit.byId("abcSlt").attr("store", objStore);
     
    dojo.connect(abcSlt, "onChange", function() {
                	reafficheGrid(dijit.byId("pcentSlt").attr("value"), this.value)
                });
    Est ce que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dijit.byId("abcSlt").attr("store", objStore);
    ne charge pas le form.Select comme il faut, ou faut il le forcer ? Y a t'il une autre méthode ?
    merci de m'éclairer car c'est bloquant pour la suite de mon dev.
    J'imagine que je ne suis pas le seul qui ait rencontré ce problème plutôt génant.
    Merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bonjour,

    Est ce que ton select affiche un blanc au chargement ou une valeur ?
    Explication :
    Contrairement a un combobox, la premiere ligne (<option>) est affiché immédiatement au chargement. Du coup, si la première ligne chargée diffère de la précédente c'est considéré comme un changement.
    Solution :
    Rajouter un blanc. Ou alors détruire l'event "onchange" avant de recharger le store puis le recréer.

  7. #7
    Membre régulier Avatar de moukit233
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    240
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 240
    Points : 123
    Points
    123
    Par défaut
    Salut,

    tu peux utiliser :
    pour deconnecter onChange avant de recharger le store puis le recréer.
    «En théorie, la théorie et la pratique sont les mêmes. En pratique, ils le sont pas."
    Albert Einstein.

Discussions similaires

  1. Chargement de données dans un tableau Forms
    Par presser dans le forum Forms
    Réponses: 2
    Dernier message: 15/04/2008, 18h28
  2. Pb données dans un select
    Par blowlagoon dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/03/2007, 21h20
  3. [VBA-E] Tableau Croise Dynamique données dans table access
    Par winner103 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/11/2006, 11h49
  4. Récupérer l'indice d'une valeur donnée dans un select
    Par mgemc2 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/08/2006, 11h31
  5. evenement à l'ajout de données dans un select
    Par mohican13 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2006, 15h10

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